1. ホーム
  2. python

[解決済み] なぜpipは私のパッケージの古いバージョンをインストールするのですか?

2023-01-08 04:06:10

質問

PyPiに新しいバージョンのパッケージ(1.2.1.0-r4)をアップロードしたところです。eggファイルをダウンロードし、easy_installでインストールすると、バージョンは正しくチェックアウトされます。しかし、pipを使用してインストールしようとすると、代わりにバージョン1.1.0.0がインストールされます。pip にバージョンを明示的に指定しても pip install -Iv tome==1.2.1.0-r4 で明示的にバージョンを指定しても、このメッセージが表示されます。 Requested tome==1.2.1.0-r4, but installing version 1.1.0.0 というメッセージが出ますが、なぜなのかわかりません。

でダブルチェックしたところ parse_version で再確認したところ、1.2.1のバージョン文字列は、図のように1.1.0のバージョン文字列よりも大きいことが確認できました。

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>

なぜ1.1.0をインストールすることになったのでしょうか?

どのように解決するのですか?

これは素晴らしい質問です。 私はそれを理解するために永遠にかかりました。 これは私のために働く解決策です。

どうやら、もし pip はローカルバージョンのパッケージを見つけることができます。 pip はリモートバージョンよりもローカルバージョンを優先します。 コンピュータをインターネットから切り離して、もう一度試してみました。 pip が正常にパッケージをインストールし、文句も言わなかったので、ソースは明らかにローカルでした。

私の場合、本当に混乱した部分は pip で新しいバージョンを見つけたことです。 pypi で新しいバージョンを見つけ、それを報告し、そして先に進んで、とにかく古いバージョンを再インストールしました...arggh。 また、それが何をしているのか、なぜなのかも教えてくれませんでした。

では、どのようにしてこの問題を解決したのでしょうか。

あなたは pip を使うと、冗長な出力が得られます。 -v フラグを使用して冗長な出力を与えることができます... しかし、1つでは十分ではありません。 ヘルプをRTFMしてみると、以下のようにできると書いてありました。 -v を複数回、最大3回まで、より冗長な出力をすることができると書いてありました。 だから私はそうしました。

pip install -vvv <my_package>

それから私は出力に目を通しました。 一行が目に留まりました。

tmp/pip-build-root/ のソースはバージョン 0.0.11 であり、要件 <my_package> を満たしています。

そのディレクトリを削除して、その後 pip は pypi から最新版をインストールしました。