警告:pipはTLS / SSLを要求するように設定されていますが、PythonのSSLモジュールは利用できません。

警告:pipはTLS / SSLを要求するように設定されていますが、PythonのSSLモジュールは利用できません。

Kali Linux 2020.1を使用していてPython3.7をインストールした後、pip3コマンドを使用してモジュールをインストールしようとすると、このエラーメッセージが表示され続けます。

  WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
    ERROR: Could not find a version that satisfies the requirement flask (from versions: none)
    ERROR: No matching distribution found for flask

    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

答え1

これを行うには、それをコンパイルしてすべての依存関係をインストールする必要があります。

  • 必要に応じてダウンロードしてください。 https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.x
  • ファイルの解凍
    tar zxvf Python-3.7.0.tar.gz --directory /tmp
    cd /tmp
    
  • Setup.distSSLを有効にするには、ファイルを編集してください。
    cd Python-3.7.0/Modules/
    vi Setup.dist
    
  • 次の行のコメントを外してopensslホームページを更新してください。
    SSL=/usr/local/ssl  <--- substitute with your openssl home directory
    _ssl _ssl.c \
            -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
            -L$(SSL)/lib -lssl -lcrypto
    
  • デプロイ用のPythonの保存とコンパイル
    cd ../
    ./configure --enable-optimizations CFLAGS="-O3" --prefix=/opt/primeur/python3.7
    make
    make install
    
  • 試してみてください

    cd /opt/primeur/python3.7/bin
    [root@myserver bin]# python3
    
    Python 3.7.0 (default, May 5 2020, 22:31:07)
    
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
    
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  • pipコマンドで更新

    [root@myserver bin]#./pip3 install --upgrade pip
    
  • pip3 install次のようなものを使用して依存関係をインストールします。

    [root@myserver bin]#./pip3 install termcolor
    
    Collecting termcolor
    Using cached https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz
    Installing collected packages: termcolor
    Running setup.py install for termcolor ... done
    Successfully installed termcolor-1.1.0
    

答え2

私の考えでは、必要なものを誤ってインストールした可能性があります。エラーは次のように発生するようです。Pythonリクエストライブラリ

正しくインストールされ、依存関係が満たされていることを確認します。ご存じのとおり、このパッケージはpython-openssl必須パッケージではなく推奨パッケージにすぎません。これをインストールするのが役立つことを確認したいかもしれません。

Package: python3-requests
Depends: python3-certifi, python3-chardet (<< 3.1.0), python3-idna, python3-urllib3 (<< 1.26), python3:any, ca-certificates, python3-chardet (>= 3.0.2), python3-urllib3 (>= 1.21.1)
Suggests: python3-cryptography, python3-idna (>= 2.5), python3-openssl, python3-socks, python-requests-doc

答え3

このソリューションは私にとって完璧に動作します。

ソースからインストールされたPython 3.7 SSLの問題

ありがとうJosh。

プロセスを要約しましょう。


スピード

最新バージョンのソースコードをダウンロードし、openSSLを再インストールすることにしました。

sudo apt-get install -y wget
mkdir /tmp/openssl
cd /tmp/openssl
wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz
tar xvf openssl-1.0.2q.tar.gz
cd /tmp/openssl/openssl-1.0.2q
./config
make
sudo make install

ここでのコア(そして私がこの記事を書いた理由)は、Pythonに新しくインストールされたopenSSLがどこにあるのかを教える方法を示すことです。デフォルトでは、手動でインストールされたopenSSLは/usr/local/sslsslディレクトリの変更時間を確認することで確認できますls -la /usr/local/ssl

デフォルトでは、Pythonはここを見ません。私たちはこの問題を解決しなければなりません。まず、Pythonインストールスクリプトの最初の部分を実行します(下図)。

# Install requirements
sudo apt-get install -y build-essential
sudo apt-get install -y checkinstall
sudo apt-get install -y libreadline-gplv2-dev
sudo apt-get install -y libncursesw5-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y libsqlite3-dev
sudo apt-get install -y tk-dev
sudo apt-get install -y libgdbm-dev
sudo apt-get install -y libc6-dev
sudo apt-get install -y libbz2-dev
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y openssl
sudo apt-get install -y libffi-dev
sudo apt-get install -y python3-dev
sudo apt-get install -y python3-setuptools
sudo apt-get install -y wget
# Prepare to build
mkdir /tmp/Python37
cd /tmp/Python37
# Pull down Python 3.7, build, and install
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar xvf Python-3.7.0.tar.xz

今すぐ停止し、CDを使用して/tmp/Python37/Python-3.7.0ファイルを開きます。Modules/Setup.dist

コメントを付けてから行を表示する必要があります。

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
 _ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto

あなたがする必要があるのは、Pythonのコンパイルプロセス中にこの行のコメントを外してそれを確認することです。これで、Pythonスクリプトの最後の数行を実行してこれを行うことができます。

cd /tmp/Python37/Python-3.7.0
./configure --enable-optimizations
sudo make altinstall

この時点で、現在動作するPythonとpipがあります(私のパスのpython3.7とpip3.7にマッピングされています)。

答え4

Ubuntu 18.04ベースのPYNQシステムのソースからPython 3.11.4をインストールしようとしています。すべての依存関係がインストールされ、上記と同じ問題が発生しました。

OpenSSLバージョンの問題であることが確認されました。

  • openssl適切なソースコードのバージョンは1.1.0gです。
  • インストール後libssllibssl-devopensslバージョン 1.1.1 では問題が解決されました。

関連情報