pipでflask(というかパッケージなんでも)をインストールすると、wrong version numberというエラーが出る。

 
 
 
会社(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: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してみる。
 
pip -Vを実行すると19.0.3だった。
(これで初めてPyCharmがpipをバージョンアップしているのを知った)
 
PyCharmで作成すると20.3.3なので、Pythonに含まれているバージョンは古いバージョン。
 
pip19.0.3のvenvにて、以下を実行。
 
エラー無く終了した。
 
pipが狂っているならこれをバージョンアップしてpip installしたら狂うはず。
 
でバージョンアップしてから

を実行。(flaskはインストール済みなので、適当にflask-sqlalchemyとした)

 
最初のエラーと同じメッセージが表示される!
 
 
Googleで頑張って調べたところ
で、
 
> Solution (well, workaround): don’t upgrade pip to 20.3.1.
 
と言っている人も居たので、たぶんこれだろう。
 
PyCharmの場合勝手にアップグレードしてしまうが、止める方法を調べるのは面倒だったので、いったん作成したあと、venvフォルダを削除し作り直して使う事にした。

 

コメントを残す


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください