ConoHa WINGで任意のバージョンのPythonを利用する

eyecatching_conoha-wing-python-any-version プログラミング
この記事は約10分で読めます。
ConoHa WINGではデフォルトでPython 3.6.8が入っているが、最新のPythonを利用したくなった。2022/06/22現在で安定版の最新である3.10.5をConoHa WINGにインストールして利用する。

結論

ConoHa WINGに入っているOpenSSLのバージョンが古く、そのままだとPython 3.10系は利用できない。OpenSSLの最新版を手動でビルド&インストールすれば、Python 3.10系が利用できるようになる。

これを実行するだけでインストール可能。OpenSSLはインストールだけでPATHには追加していない。インストールするディレクトリの場所を変えたい場合は、★のところを変えるだけでいける(はず)。

やり方模索

pyenvではメモリ不足でNG

最初はpyenvで実現しようとした。やってみたらmake: vfork: Cannot allocate memoryというメモリ確保でできませんエラーが発生したため、諦めた。この記事のコメントによると、他のレンタルサーバでもメモリ確保エラーが出てできないみたい。

ソースからビルド&インストール

仕方ないのでソースからビルドすることにした。

これで、インストール自体は成功するが、、

[cXXXXXXX@web0079 ~]$ pip3 install pandas
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pandas/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pandas/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pandas/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pandas/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pandas/
Could not fetch URL https://pypi.org/simple/pandas/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pandas/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
ERROR: Could not find a version that satisfies the requirement pandas (from versions: none)
ERROR: No matching distribution found for pandas
WARNING: You are using pip version 22.0.4; however, version 22.1.2 is available.
You should consider upgrading via the '/home/cXXXXXXX/local/python3_10_5/bin/python3.10 -m pip install --upgrade pip' command.

インストール後、pip3コマンドでライブラリをインストールしようとすると、pipはTLS/SSLが必要だけど、PythonのSSLモジュールは利用できてないよ、という警告が出る。実際、SSLが使えないため、ライブラリはインストールできない。

[cXXXXXXX@web0079 ~]$ python3 -c "import ssl"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/cXXXXXXX/local/python3_10_5/lib/python3.10/ssl.py", line 99, in <module>
    import _ssl             # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'

このようにpython3でsslモジュールをインポートしようとしてもできない。

原因は、Python 3.10からはOpenSSL 1.1.1以降が必要になったため(コチラの記事)。

[cXXXXXXX@web0079 ~]$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

ConoHa WINGのOpenSSLバージョンは1.0.2k-fipsであるため条件を満たしていない。

でも何故か/opt/alt/openssl11/lib64にOpenSSL 1.1.1用の共有ライブラリはある。。OpenSSLのバージョンを上げたかったけど、何らかの理由でできなくて共有ライブラリだけ置いた的な感じと推察。

なので、手動でビルド&インストールしたOpenSSL 1.1.1を利用して、Python 3.10.5をインストールする。

[cXXXXXXX@web0079 ~]$ ${HOME}/local/openssl1_1_1p/bin/openssl version
OpenSSL 1.1.1p  21 Jun 2022 (Library: OpenSSL 1.1.1d  10 Sep 2019)
[cXXXXXXX@web0079 ~]$ ldd ${HOME}/local/openssl1_1_1p/bin/openssl
        linux-vdso.so.1 =>  (0x00007fff0035f000)
        libssl.so.1.1 => /opt/alt/openssl11/lib64/libssl.so.1.1 (0x00007f6d0b250000)
        libcrypto.so.1.1 => /opt/alt/openssl11/lib64/libcrypto.so.1.1 (0x00007f6d0ad77000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f6d0ab61000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f6d0a95d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6d0a741000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6d0a373000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f6d0b4e4000)

インストールする手順は1.結論を参照。インストールしたOpenSSLのバージョンと共有ライブラリの確認結果は上記。

[cXXXXXXX@web0079 ~]$ which python3
~/local/python3_10_5/bin/python3
[cXXXXXXX@web0079 ~]$ python3 -V
Python 3.10.5
[cXXXXXXX@web0079 ~]$ ldd ${HOME}/local/python3_10_5/bin/python3
        linux-vdso.so.1 =>  (0x00007ffd49a88000)
        libpython3.10.so.1.0 => /home/cXXXXXXX/local/python3_10_5/lib/libpython3.10.so.1.0 (0x00007f76ce45f000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f76ce228000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f76ce00c000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f76cde08000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f76cdc05000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f76cd903000)
        libssl.so.1.1 => /opt/alt/openssl11/lib64/libssl.so.1.1 (0x00007f76cd66f000)
        libcrypto.so.1.1 => /opt/alt/openssl11/lib64/libcrypto.so.1.1 (0x00007f76cd196000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f76ccdc8000)
        libfreebl3.so => /lib64/libfreebl3.so (0x00007f76ccbc5000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f76cea64000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f76cc9af000)

インストールしたPythonのPATHとバージョン、共有ライブラリの確認結果は上記。

その他

・OpenSSL 3.0.4をインストールしても、そのあとのPythonのmake installで失敗する。

・OpenSSLのバージョンはConoHa WINGに入っている1.0.2k-fipsのまま、足りないライブラリ(libssl.so.1.1とlibcrypto.so.1.1)だけ/opt/alt/openssl11/lib64/libssl.so.1.1から引っ張ってくるというやり方は失敗する。

タイトルとURLをコピーしました