既存の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が上手く起動せず、少し時間が掛かってしまいました…参考になれば幸いです。