2

我正在使用cx_freeze在 64 位 Windows 下使用 python 3.2 x86 为简单的 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 位版本(尽管仍然不完美),这不是什么大问题,但显然 64 位 dll 不适用于我的 32 位 exe。那么如何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 的调用包装在批处理(或 shell)脚本中,并在调用 cx_freeze 脚本之前在脚本中操作 PATH。

对于这种情况,我在网上找不到任何示例,因此我的研究基于阅读 cx_freeze 源代码。很可能有一种更优雅的技术,但从文档和源代码中都看不出来。

于 2012-06-25T04:19:50.397 回答