Pipは常にSSLに失敗しpip install dedupe
ますpip install --trusted-host pypi.python.org dedupe
出力はどのような場合でも常に同じです。
重複排除の収集
'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 証明書の検証に失敗しました (_ssl.c:777)'),)' によって接続が切断された後、再試行しています (再試行 (合計 = 4、接続 = なし、読み取り = なし、リダイレクト = なし、ステータス = なし))。/simple/dedupe/
再試行しています...スキップ
要件 dedupe を満たすバージョンが見つかりませんでした (バージョン: ) dedupe に一致するディストリビューションが見つかりません
そこで、Anaconda をアンインストールして再インストールしました。結果は同じです。
問題は、私の _ssl.c ファイル (どこにあるかわかりません) が壊れているか何かだと思いますか? とにかく SSL 検証をバイパスするように指示しているのに、なぜ pip がそれを参照する必要があるのでしょうか?
ベストアンサー1
それは、2018年の変更PyPIのドメイン
ファイアウォール/プロキシが以下のアクセスを許可していることを確認してください:
- pypi.org
- ファイル.pythonhosted.org
たとえば、次のようなことを試してみてください。
$ python -m pip
install
--trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org [--proxy ...] [--user]<packagename>
$ pip help install
オプションの説明については、を参照してください--user
(仮想環境では省略してください)。
この--trusted-host
オプションは実際にはSSL/TLSをバイパスしませんが、有効な(またはまったく)HTTPSがない場合(そしてその場合のみ)ホストを信頼できるものとしてマークすることができます。PiPYでは、pypi.org(旧pypi.python.org)するHTTPSを使用し、その前にCDNがあり、接続するpipクライアントのオプションに関係なく、常にTLSv1.2ハンドシェイク要件を強制します。ただし、HTTPのみのアクセスでpypi.orgのローカルミラーがある場合は--trusted-host
便利です。ああ、プロキシの背後にいる場合は、次のことも指定してください。--proxy [user:passwd@]proxyserver:port
一部の企業プロキシでは、交換するHTTPS 接続の証明書をオンザフライで更新します。また、システム クロックが同期していない場合は、SSL 検証プロセスも中断される可能性があります。
ファイアウォール/プロキシ/クロックに問題がない場合は、pipのSSLハンドシェイクで使用されているSSL証明書を確認してください。実際、現在のcacert.pem(MozillaのCAバンドルカール) を実行して、pip オプションを使用して試してください--cert
。
$ pip --cert ~/cacert.pem install --user <packagename>
ここで、--cert
引数は PEM 形式の代替 CA バンドルへのシステム パスです。(--user オプションについては、以下を参照してください)。
または、回避策として、カスタム構成 ~/.pip/pip.conf を作成し、オプションを有効なシステム証明書 (または cacert.pem) にポイントすることもできます。次に例を示します。
[グローバル]
証明書 = /etc/pki/tls/external-roots/ca_bundle.pem
(または別のpemファイル)
pip にある元の cacert.pem を信頼できる CA バンドルに手動で置き換えることも可能です (たとえば、pip が非常に古い場合)。古いバージョンの pip では、証明書の問題が発生した場合に、pip/_vendor/requests/cacert.pem とシステム ストアの間でフォールバックしていました/etc/ssl/certs/ca-certificates.crt
が/etc/pki/tls/certs/ca-bundle.crt
、最近の pip では、pip/_vendor/certifi/cacert.pem のみに依存しているように見えるため、これは当てはまりません。
基本的に、pip パッケージは、SSL 証明書の検証などにrequests
使用する which を使用します。これらはすべて、TLS 検証に必要な最新の CA バンドル (cacert.pem ファイル) を提供するパッケージ (pip 9.0.2 以降にも含まれます) とともに、pip 内に同梱 (ベンダー提供) されています。requests 自体は内部で urllib3 と certifi を使用しており、9.0.2 より前では、pip は requests またはシステムからの cacert.pem を使用していました。つまり、OS と pip がかなり前に導入されていた場合は特に、pip を実際に更新すると、CERTIFICATE_VERIFY_FAILED エラーを修正できる可能性があります。urllib3
certifi
OPはアナコンダを使用していたので、次のことを試すことができました
$ conda update pip
。問題が発生する可能性があるcondaとpip
両方が同じ環境で使用されている場合。pipのバージョンアップデートが利用できない場合は、以下を試すことができます。
$ conda config --add channels conda-forge; conda update pip
あるいは、以下を使用することもできます。コンダPythonパッケージを直接インストール/管理するツールです。pipとは完全に別のツールですが、パッケージとvenvの管理に関しては同様の機能を提供します。パッケージはPyPIからではなく、anaconda 独自のリポジトリ問題は、両方を混ぜて の後にcondaを実行するとpip
、前者がpipでインストールされたパッケージ(とその依存関係)を上書きして壊し、すべてが使用できなくなる可能性があることです。そのため、どちらか一方だけを使用する、または、必要に応じて、ピップのみconda (pip の後には conda なし)、および分離された conda 環境でのみ使用できます。condaを使用しない通常のLinux Pythonインストールの場合:
OSディストリビューションで提供されるpipのバージョンを使用している場合は、システム全体のpip更新のためにベンダー提供のアップグレードを使用してください:
$ sudo apt-get install python-pip
または:$ sudo yum install python27-pip
ディストリビューションは通常PyPIより遅れているため、一部の更新はすぐには利用できない場合があります。この場合、pipをアップグレードすることは可能です。ユーザーレベル(あなたの$ホームdir) または virtualenv 内では、次のようにします。
$ python -m pip install --user --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org --upgrade pip
(--user
virtualenv 内では省略)
この--user
スイッチは、OS 全体ではなく、現在のユーザー (ホームの ~/.local/lib/) の pip のみをアップグレードします。これは、システムの python パッケージに干渉しないようにするための良い方法です。最近の Ubuntu/Fedora バージョンで配布されている pip では、デフォルトで有効になっています。インポートエラーこのオプションを使わずにOSレベルのシステムpipを上書きしてしまうと、
代わりに(ユーザーレベルでも)次の方法を試すことができます:
$ curl -LO https://bootstrap.pypa.io/get-pip.py && python get-pip.py --user
PyPA脚本pip._vendor.certifi から .pem SSL バンドルを抽出するラッパーが含まれています。
それでもダメなら、-vvv
出力に詳細を追加するオプションを付けてpipを実行し、別のSSLError
原因があるかどうかを確認してください。tlsv1 アラート プロトコル バージョン。