6

すべてのシステムに同じ Python がインストールされていることを確認し、構成の問題を軽減するために、すべてのシステムに共通の Python をインストールしています。このインストールは共有ドライブにあります。このインストールを共有する複数のプラットフォームもあります。Python のコンパイル時に --exec-prefix 構成オプションを設定することで、競合するプラットフォーム固有のファイルを回避します。

私の問題は、プラットフォームに依存する easy_install (またはそれ以外) を使用して卵をインストールしたいということです。easy_install は、インストールのプラットフォームに依存しない部分の site-packages ディレクトリに卵を置きます。卵の名前にはプラットフォームが含まれているため、競合はありません。しかし、python は最初に見つけたものだけをロードします。(そのため、Solaris では Linux Egg をロードしようとする場合があります)。easy-install.pth ファイルを変更すると、検出されるファイルが変更される可能性がありますが、それはほとんど役に立ちません。

.egg ファイルをプラットフォームに依存するパッケージ ディレクトリに移動し、pkg_resources.require() を使用してそれらをロードします (または手動でパスを調整します)。しかし、プラットフォームは卵の名前になっているので、そうする必要はないようです。

Pythonが正しいプラットフォームの卵をロードすることを保証できる、より一般的な方法はありますか?

4

4 に答える 4

2

私が最終的に行ったのは、プラットフォームに依存する卵をプラットフォーム固有のサイトパッケージディレクトリに手動で移動することでした(http://docs.python.org/install/index.htmlで指定)。次に、同じディレクトリに別の easy-install.pth を作成し、インストールする卵をリストします。

easy_install が exec_prefix を尊重し、プラットフォームに依存する卵を正しい「非純粋なモジュール配布」の場所に置くと、これははるかに便利になります。おそらく、私は easy_install の人々にこれを要求するでしょう。

于 2009-12-17T18:39:18.377 に答える
1

Python にはこれを可能にする十分なフックがありますが、おそらく賢明ではありません。本当にこれを実装したい場合は、PEP 302easy_installを見て、またはdistributeソースコードのハッキングを開始してください。ご存知のように、 には実際には何のロジックもありませんeasy-install.pth

どの Python パッケージをインストールしたいかを単純に記録しておく方がよいでしょう。たとえば、目的のセットに依存する独自の Python パッケージを作成できます。

于 2009-12-15T15:47:30.423 に答える
0

「easy_install -m」を使用してプラットフォーム固有のパッケージをすべてインストールし、sys.path にデフォルト バージョンが存在しないようにします。これにより、実行時にバージョンの解決が行われ、プラットフォーム情報が考慮されます。

于 2010-01-29T18:17:49.427 に答える