会社(Proxyあり)で
pip install --proxy proxy_url:8080 Flask
を実行すると正常終了しなくなった。結果だけ言うと、pipを20.3.3にアップグレードすると発生する。
pipをアップグレードせず、元のまま(私の環境では19.0.3)では発生しない。
解決策は見つからなかった。
回避策としてはProxy環境でpipを使う場合は、20.3.3にしないこと。
(20.3.1で出た人もいるようなので、20.3.xが怪しい?)
以下、現象と再現手順
目次
現象
Proxy環境下で以下コマンド(正確には「ファイル->設定->プロジェクト:プロジェクト名->Pythonインタープリター->「+」」からFlaskをインストール)を実行すると発生する。
(PyCharmで新しいプロジェクトを作成。その際Pythonインタープリタを新規作成する(次の環境を使用[Virtualenv]))
(PyCharmはVirtualenvを作成する際、pipを最新にアップグレードしてくれている模様。)
1 2 |
# コマンド pip install --proxy proxy_url:8080 Flask |
エラーメッセージは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 |
# エラーメッセージ 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(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)'))) - skipping WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)'))': /simple/flask/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)'))': /simple/flask/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)'))': /simple/flask/ WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)'))': /simple/flask/ WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)'))': /simple/flask/ ERROR: Could not find a version that satisfies the requirement Flask ERROR: No matching distribution found for Flask |
仮説1:PyCharmのバグか?
PyCharm Professional 2020.3にアップグレードしたら出始めたので、PyCharmのせいかと疑ってみた。
OSとPyCharmのバージョンが同じで、ネットワーク/マシンが別の環境で同じ手順でインストールしてみて同じエラーが出たらPyCharmのせいかもしれない。
今はクラウドという便利な環境があるのでAzure上にVM(Windows)を作成し、PyCharmをインストールしてFlaskを追加してみた。
結果だけ言うと、エラー無くFlaskをインストールできた。
どうやらPyCharmのバグではないようだ・・・。
仮説2:Proxyの設定がおかしい?
PyCharmはおかしくないのでProxyがおかしいのかもしれない。
PCの設定を再確認し、Proxyを設定し直して実行してみた。
最初のエラーと同じメッセージが表示される。
!Proxyのせいか?
仮説2-2:Proxyサーバの設定がおかしい?
仮説2からProxyがおかしいような感じがするので、Proxyサーバ管理者に連絡してみた。
結論だけ言うと、Proxyサーバ管理者のPCからpipでインストールできたという結果が返ってきた・・・。
Proxyサーバではなく個人のPCがおかしいんじゃないか?という感じになったので、仮説2は間違いっぽい。
環境の違いを確認してみる必要がある。
正常終了するPCと、異常終了するPCの違いは何か?
1. ネットワークが違う。
片方はProxy内。
片方はProxy無し。
他には何かないか?
Pythonのバージョンとかを確認していたところ、Pipのバージョンが異なる事に気づいた。
(PyCharmが勝手にバージョンアップしているのを知らなかった)
Proxyサーバ管理者のpipバージョンは9.x。私は20.3.3。
2. pipのバージョンが違う。
片方は9.x(エラーが出ない)
片方は20.3.3(エラーが出る)
これかな?
仮説3:pipが狂っている。
Proxy内ネットワークのPCで、PyCharmを使わず仮想環境を作ってpip installしてみる。
1 |
python -m venv venv |
pip -Vを実行すると19.0.3だった。
(これで初めてPyCharmがpipをバージョンアップしているのを知った)
PyCharmで作成すると20.3.3なので、Pythonに含まれているバージョンは古いバージョン。
pip19.0.3のvenvにて、以下を実行。
1 |
pip install --proxy proxy_url:8080 Flask |
エラー無く終了した。
pipが狂っているならこれをバージョンアップしてpip installしたら狂うはず。
1 |
pip install --upgrade pip |
でバージョンアップしてから
1 |
pip install --proxy proxy_url:8080 flask-sqlalchemy |
を実行。(flaskはインストール済みなので、適当にflask-sqlalchemyとした)
最初のエラーと同じメッセージが表示される!
Googleで頑張って調べたところ
で、
> Solution (well, workaround): don't upgrade pip to 20.3.1.
と言っている人も居たので、たぶんこれだろう。
PyCharmの場合勝手にアップグレードしてしまうが、止める方法を調べるのは面倒だったので、いったん作成したあと、venvフォルダを削除し作り直して使う事にした。