Egg としてパッケージ化された Python 拡張モジュールを、インストールせずにロード可能にするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/737383

質問

ベースとなるビルド スクリプトを作り直しているところです 素晴らしい Waf ツール (私は何年もの間SConsを使用していましたが、それは単なる 方法 遅すぎる)。

とにかく、次の状況に遭遇しましたが、解決策が見つかりません。

  • 以前にビルドされた多数のeggファイルに依存する製品があります。
  • を使用して製品をパッケージ化しようとしています Pyインストーラー 構築プロセスの一部として。
  • 最初に依存関係を構築します。
  • 次に、PyInstaller を実行して、作成した卵に依存する製品をパッケージ化したいと思います。PyInstaller がパッケージ化プロセスの一部としてこれらの Egg ファイルをロードできるようにする必要があります。

これは簡単そうに思えます:あなたは何を解決しますか PYTHONPATH のコピーを作成する必要があります sys.environ 変数を正しく設定し、次を使用して PyInstaller スクリプトを呼び出します。 subprocess.Popen 以前に構成した環境を env 引数として渡します。

問題はその設定です PYTHONPATH 追加する卵が zipsafe としてパッケージ化された拡張モジュールである場合、それだけでは十分ではないようです。この場合、組み込みライブラリをインポートできないことがわかります。

Egg を解凍すると (ディレクトリの名前を .egg に変更すると)、それ以上の設定を行わずにインポートできますが、これは今回の場合は希望したものではありません。

次の手順を実行して、サブシェルからインポートする卵を取得することもできます。

  • 設定 PYTHONPATH インポートしたいエッグを含むディレクトリ (エッグ自体のパスではありません)
  • Pythonシェルをロードして使用する pkg_resources.require 卵を見つけるために。

これが完了すると、卵は通常どおりロードされます。繰り返しますが、これは現実的ではありません。なぜなら、これらの卵を最初からインポートできるように Python シェルを実行できる必要があるからです。

ダーティなオプションは、実際のターゲット スクリプトを呼び出す前に、上記のアクションを実行するラッパー スクリプトを出力することですが、これは間違ったことのように思えます。もっと良い方法があるはずです。

役に立ちましたか?

解決

ふむ、私はこれが私の悪いだったと思います。問題は、拡張パッケージのsetup.pyでzipsafeフラグは、このような全くとしてそれを治療するためにあなたの能力に影響を与えると思われる、Falseに設定されたことがあったように見える。

今、私はTrueに、私は単にPYTHONPATHにそれぞれ1を加えることで、卵のファイルをインポートできるように設定したこと。

私は他の誰かが1日、この答えは重宝しますね!

他のヒント

:あなたは解決策を持っていますが、

、あなたは常にあなたがコアシステムのpythonいじりなしでPythonのパッケージをインストールしてテストすることができますのpythonの仮想環境を作成し、「virtualenvのを」試みることができます

http://pypi.python.org/pypi/virtualenvする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top