Amazon Linux 2にPython3.10をインストール

Python

既存のPythonが古い

新たにAmazon Linux 2 AMIを使用して、インスタンスを立ち上げたのですが、既存で入っていたPython3のversionが3.7.10と古く、新しくしておきたかったので、Python3.10.2を入れました。

opensslが古いとPythonが上手く入らない

先に実際にインストールした際のコードを書くと以下のようになります。

# opensslを削除
# 先に入っている場合、conflictして上手く入らない為
sudo yum remove -y openssl openssl-devel

# 必要なパッケージをインストール
sudo yum install -y openssl11 openssl11-devel

export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)

sudo yum groupinstall -y "Development Tools"
sudo yum install -y kernel-devel kernel-headers bzip2-devel libdb-devel libffi-devel
sudo yum install -y gdbm-devel xz-devel ncurses-devel readline-devel tk-devel uuid-devel

# zlibをインストール
wget http://zlib.net/zlib-1.2.11.tar.gz \
 && tar xvzf zlib-1.2.11.tar.gz \
 && cd zlib-1.2.11 \
 && ./configure \
 && make -j4 \
 && sudo make install

# python3.10.2 をインストール
wget https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgz \
 && tar xvzf Python-3.10.2.tgz \
 && cd Python-3.10.2 \
 && ./configure \
--with-ensurepip \
--enable-shared \
--enable-ipv6 \
--prefix=/usr/local/python3.10.2 \
 && make \
 && sudo make altinstall  # 安全の為、altinstall使用

# パスを通す
sudo ln -sf /usr/local/python3.10.2/bin/python3.10 /usr/bin/python3
sudo ln -sf /usr/local/python3.10.2/bin/pip3.10 /usr/bin/pip3
sudo echo 'LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/python3.10.2/lib"' >> ~/.bashrc
sudo echo 'PATH="$PATH:/usr/local/python3.10.2/bin"' >> ~/.bashrc
source ~/.bashrc

# libraryが無いと怒られるのでコピー
sudo cp /usr/local/python3.10.2/lib/libpython3.10.so.1.0 /usr/lib64

# pipをアップデート
pip3 install --upgrade pip

自分が使用していた環境だと、opensslが既に入っていた為、yumでopenssl-develを入れてもコンフリクトと怒られて上手く入っていなかったようで、その後のPythonのインストールのところで躓きました。

なので、最初にyumでopensslを削除してから入れるようにしてあります。

気をつけたいのは、一応、Pythonはインストール出来るのですが、新しいopensslが入っていないと以下のようなエラーが出てpipが上手く動かなくなります。

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available

その場合は、opensslを入れ直して、再度Pythonをインストールし直しましょう。

最後に

opensslの問題でpipが上手く起動せず、少し時間が掛かってしまいました…参考になれば幸いです。

コメントを残す