複数バージョンのインストール#
- ページステイタス:
古い情報
easy_install を使えば、異なるバージョンの同一プロジェクトをひとつの環境に同時にインストールして、なおかつ、それぞれ動作時にプロジェクトの特定のバージョンを (pkg_resources
での指定を通じて) 要求 <require>
する複数のプログラムをその環境で動作させることができます。
多くのユースケースでは、 require
ディレクティブを混乱させる事なく、仮想環境がこのような需要を満たします。しかしながら、同一環境内に(複数バージョンを)並行してインストールすることの利点は、Linux 配布物におけるシステム側の Python のように、複数のアプリケーションによって共有される環境で動作することです。
並行インストールに立脚した pkg_resources
の主要な制限事項は、 pkg_resources
をインポートするや否や、sys.path 上で既に利用可能なものはすべてそのバージョンに デフォルト バージョンが固定されてしまうことです。コマンドラインスクリプトで生成された setuptools
が pkg_resources
を使ってプログラム実行のためのエントリポイントを探索するので、これは問題を引き起こすかもしれません。これが意味するところは、例えば、そのアプリケーションが、標準の sys.path
上に存在するものなら何であれ、それとは異なるバージョンを必要とする場合に、 nose
を通じて require
テストを使ったり gunicorn
を通じて WSGI アプリケーションを呼び出したりすることができない - メインのアプリケーションのためのスクリプトラッパがデフォルトで利用可能なバージョンに固定されてしまって、各アプリケーションの引き続く require
呼び出しが見せかけのバージョン衝突によって失敗してしまう、ということです。
最初に pkg_resources
をインポートするよりも前に __main__.__requires__
の中のすべての依存関係を設定しておくことでこの問題を回避することができますが、このアプローチでは影響を受けるツールを標準のコマンドラインからの呼び出しで使うことができないことになります - つまり、独自のラッパスクリプトを書くか、アプリケーションの main エントリポイントを直接に呼び出すための python -c '<command>'
を使うかしなければなりません。
さらに詳しい情報については、 pkg_resources 説明文書 を参照してください。