質問: pipを使って特定のパッケージバージョンをインストールする 私は--no-site-packagesオプションで作成された新鮮なvirtualenvを使ってmysql_pythonアダプターのバージョン1.2.2をインストールしようとしています。 pypiに表示される現在のバージョンは 1.2.3 です。古いバージョンをインストールする方法はありますか?私はこれがそれをするべきであることを述べる記事を見つけました:pip install mysql_python==1.2.2 ただし、インストール時には、サイトパッケージにmysql_python-1.2.3-py2.6.egg-infoが表示されたままです。これはこのパッケージ特有の問題なのか、それとも私は何か悪いことをしているのか?
回答: 私は最近pipの-iフラグを使用しているときに問題に遭遇しました。-iは not 続行する前に既存のパッケージをアンインストールします。古いものの上にインストールするだけです。これは、バージョン間で削除されるべきファイルが代わりにそのまま残されることを意味します。これらのファイルが他のインストール済みモジュールと名前を共有する場合、これは奇妙な振る舞いを引き起こす可能性があります。たとえば、packageという名前のパッケージがあるとしましょう。いずれかのpackagesファイルで、それらはimport datetimeを使用します。現在、package@2.0.0では、これは標準ライブラリdatetimeモジュールを指していますが、package@3.0.0では、標準ライブラリバージョンの代わりとしてローカルdatetime.pyを追加しています(何らかの理由で)。 それでは、pip install package==3.0.0を実行したとしましょうが、後で実際にバージョン2.0.0が欲しいことがわかります。今pip install -i package==2.0.0を実行すると、 古いdatetime.pyファイルは削除されないので、import datetimeを呼び出すと間違ったモジュールがインポートされます。 私の場合、新しいバージョンのパッケージにはpython 3とのみ互換性のあるファイルが追加されていたため、奇妙な構文エラーが発生しました。これに基づいて、私は古いパッケージをアンインストールすることはインストールされたパッケージバージョンを更新するときに-iを使用することより常に望ましいと主張します。