2

私はcx_freeze64ビットWindowsでpython3.2x86を使用して単純なPyQtアプリケーションのexeを生成するために使用しています。

問題は、cx_freezeすべての依存関係を完全に一緒にコピーする一方で、奇妙な理由QtCore4.dllで私のpythonインストールからのを使用せず、代わりに次のことを行うことです。

copying D:\Python\Python 3.2 x86\lib\site-packages\PyQt4\QtCore.pyd -> build\exe.win32-3.2\PyQt4.QtCore.pyd
copying C:\Program Files\MiKTeX 2.9\miktex\bin\x64\QtCore4.dll (!!) -> build\exe.win32-3.2\QtCore4.dll

64ビットバージョンを作成している場合(まだ完全ではありませんが)、これはそれほど問題にはなりませんが、32ビットexeでは明らかに64ビットdllが機能しません。cx_freezeでは、システムパスでdllを探すのをやめ、代わりにsys.pathコントロール内の他のパスを検索するようにするにはどうすればよいですか?

pathオプションをsys.path明示的に設定しようとしましたが、役に立ちませんでした。

4

1 に答える 1

2

提供されたデータに基づいて、少なくとも3つのオプションが表示されます。

1)プロセスから除外したいパスを使用してbin-path-excludes、ファイルにオプションを追加できます。build_exeあなたの例に固有:

bin-path-excludes: ["C:\Program Files\MiKTeX 2.9\miktex\bin\x64",] ,

2)PATHを永続的に再配置して、miktexエントリが使用するQtCore4.dllインポートよりも遅くなるようにします(これにより、実行可能なオプションになることができなくなる可能性があります)

3)cx_freezeスクリプトを呼び出す前に、cx_freezeの呼び出しをバッチ(またはシェル)スクリプトでラップし、スクリプトのPATHを操作します。

この種のシナリオの例はWebで見つからなかったため、私の調査はcx_freezeソースコードの読み取りに基づいています。より洗練された手法があるかもしれませんが、ドキュメントからもソースコードからも明らかではありませんでした。

于 2012-06-25T04:19:50.397 に答える