我正在使用cx_freeze
为64位Windows下的python 3.2 x86的简单PyQt应用程序生成一个exe。
问题在于虽然cx_freeze
完全复制了所有依赖项,但由于某些奇怪的原因,它不使用我的python安装中的QtCore4.dll
,而是执行以下操作:
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位版本(虽然仍然不完美),这不是什么大问题,但显然64位dll对我的32位exe不起作用。那么如何让cx_freeze
停止查看dll的系统路径,而是让它在sys.path
或我控制中的其他路径中搜索?
我尝试将path
选项明确设置为sys.path
,但无济于事。
答案 0 :(得分: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)在批处理(或shell)脚本中包含对cx_freeze的调用,并在调用cx_freeze脚本之前操作脚本中的PATH。
我在网络上找不到这种情况的任何示例,因此我的研究基于阅读cx_freeze源代码。很可能是一种更优雅的技术,但是从文档和源代码中都看不出来。