私は走っています:
Amazon Linux AMI 2018.03.0
Linux ip-xxx-yy-z-ww 4.14.77-70.59.amzn1.x86_64 #1 SMP Mon Nov 12 22:02:45 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
マルチPython環境。 Python 2.7.15と3.7.2の両方がインストールされています。
通常の(Python2)ピップは問題なく動作します。
pip3 install flask
を実行しようとすると、次のエラーが発生します。
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting flask
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/flask/
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/flask/
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/flask/
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/flask/
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/flask/
Could not fetch URL https://pypi.org/simple/flask/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(Host='pypi.org', port=443): Max retries exceeded with url: /simple/flask/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
Could not find a version that satisfies the requirement flask (from versions: )
No matching distribution found for flask
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(Host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
他のパッケージをインストールしようとすると、同じエラーが表示されます。
pip3バージョンは18.1です
--trusted-Host pypi.org
を追加しても効果はありません。
CA証明書をインストールしても役に立たなかった
次のガイドに従ってインストールされたPython 3: https://stackoverflow.com/a/8112006/8826349
編集:私は今気付いた、make
をPython 3で実行すると、正常に終了しましたが、次のメッセージが表示されていました。
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_hashlib _ssl _tkinter
_uuid
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
_abc atexit pwd
time
Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_Host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381
EDIT2:
私の問題は this と同じようです。ただし、スレッドは問題の説明以外に解決策を提供しません。
this ガイドを使用して、opensslの新しいバージョンをコンパイルしようとしました。しかし、opensslの新しいバージョンでは問題が解決しませんでした。
EDIT3:
この問題の解決策を見つけることができませんでした。
AmazonのLinuxバージョンはPython 3。
Amazon Linux 2と呼ばれる別のOSがあり、Python 3のインストールはyum install python3
の実行と同じくらい簡単です。
ただし、Amazon Linux 2には独自の問題があります。 Python 2インストールにはpip
がありません。次のコマンドを実行して手動でインストールできます。
curl -O https://bootstrap.pypa.io/get-pip.py
python get-pip.py --user
しかし、これは実際にはpip3をオーバーライドするため、Python 3はpip
なしで残ります。
したがって、このコンテキストのSSLError( "SSLモジュールが利用できないためHTTPS URLに接続できません。")は、ソースからpython3.7をコンパイルしたときに、システムのOpenSSLライブラリに対してリンクされなかったことを示しています。徹底的な解決策は、次のようなものを使用して、libのほかに必要なヘッダーがあることを確認することです。$ yum install openssl-devel.x86_64 openssl.x86_64
そしてOpenSSL libに対してリンクして、ゼロから再コンパイルします。
ただし、ご指摘のとおり、python3をyum(Amazon独自のリポジトリから、Amazon Linux用にテストされたパッケージから)でインストールする方が、EC2ではるかに簡単で堅牢なアプローチであり、すべての依存関係が解決されます。たとえば、次のようなものがAmazon Linux(バージョン1)で機能します。
$ yum install python36.x86_64
$ yum install python36-pip.noarch
通常、Python3.6はすでにEC2にプリインストールされていますが、python36-pipはプリインストールされていません...
これは、Python3のpipスクリプトがpip3
コマンドによって呼び出される、正しいデフォルトの動作です。一方、pip
はPython2用です(インストールされている場合-python2のyumパッケージはpython27-pip.noarchです)。次に例を示します。
$ pip3 -V
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)
$ pip2 -V
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
$ pip -V
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
バージョン化されたPythonコマンドを-mスイッチ(モジュール用)と組み合わせて使用して、対応するバージョンのpipを実行することもできます。次に例を示します。$ python3 -m pip install --user flask
get-pip.py --user
を介してインストールしたものは、$ HOME/.local/binディレクトリのどこかにある可能性があります。 --user
スイッチは、システム全体ではなく現在のユーザー(〜/ .local/lib /内)のみにパッケージをインストールします。これは、システムへの干渉を回避するための実際の方法ですpythonパッケージ。
さらに優れた点として、virtualenvまたはvenv分離環境内でpipを使用できます。python36-virtualenv(yumを介してインストール可能)と、デフォルトの 'venv'モジュールが組み込まれたPython3であり、すぐに利用できます(python3 -m venv yournewenvname
)。分離したpython環境(ディレクトリ))を作成してアクティブ化したら、pythonバージョンに関係なく、そこで簡単なpip install flask
を実行できます。幸運を!
Sslエラーを無視するか、open-sslをインストールできます。 this を試してみてください。