私はビルド スクリプトを素晴らしい Waf ツールに基づいて作り直している最中です(以前から SCons を使用していましたが、あまりにも遅すぎます) 。
とにかく、次の状況に遭遇しましたが、解決策が見つかりません。
- 以前にビルドされたいくつかの卵ファイルに依存する製品があります。
- ビルド プロセスの一部としてPyInstallerを使用して製品をパッケージ化しようとしています。
- 最初に依存関係を構築します。
- 次に、PyInstaller を実行して、ビルドした卵に依存する製品をパッケージ化します。パッケージ化プロセスの一環として、これらの卵ファイルをロードできるようにするには、PyInstaller が必要です。
これは簡単に聞こえます: どうあるPYTHONPATH
べきかを考え出し、変数を正しく設定するコピーを作成し、以前に構成した環境を env 引数として渡してsys.environ
PyInstaller スクリプトを呼び出します。subprocess.Popen
問題は、PYTHONPATH
追加する卵が zipsafe としてパッケージ化された拡張モジュールである場合、設定だけでは十分ではないように思われることです。この場合、組み込みライブラリをインポートできないことがわかります。
卵を解凍すると (ディレクトリの名前を .egg に変更)、それ以上の設定なしで卵をインポートできますが、この場合はこれが必要なわけではありません。
次のようにして、卵をサブシェルからインポートすることもできます。
PYTHONPATH
インポートしたい卵を含むディレクトリに設定します(卵自体のパスではありません)- Python シェルをロードし
pkg_resources.require
、卵を見つけるために使用します。
これが完了すると、卵は通常どおりロードされます。繰り返しますが、これは実用的ではありません。なぜなら、これらの卵をオフからインポートする準備ができている方法で Python シェルを実行できる必要があるからです。
汚いオプションは、実際のターゲット スクリプトを呼び出す前に上記のアクションを実行するラッパー スクリプトを出力することですが、これは間違っているように思われます。これを行うためのより良い方法があるはずです。