Python cx\ U冻结从错误位置复制dll

Python cx\ U冻结从错误位置复制dll,python,python-3.x,cx-freeze,Python,Python 3.x,Cx Freeze,我正在使用cx\u freeze为64位Windows下使用python 3.2 x86的简单PyQt应用程序生成一个exe 问题是,虽然cx\u freeze将所有依赖项完美地复制在一起,但出于某种奇怪的原因,它没有使用python安装中的QtCore4.dll,而是执行以下操作: copying D:\Python\Python 3.2 x86\lib\site-packages\PyQt4\QtCore.pyd -> build\exe.win32-3.2\PyQt4.QtCore.

我正在使用
cx\u freeze
为64位Windows下使用python 3.2 x86的简单PyQt应用程序生成一个exe

问题是,虽然
cx\u 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\u freeze
停止在系统路径中查找DLL,而是让它在
sys.path
或我控制的其他路径中搜索


我尝试将
path
选项显式设置为
sys.path
,但没有效果。

根据提供的数据,我至少可以看到3个选项:

1) 您可以将选项
bin path excludes
添加到
build_exe
文件中,其中包含您希望从进程中排除的路径。具体到您的示例:

bin-path-excludes: ["C:\Program Files\MiKTeX 2.9\miktex\bin\x64",] ,
2) 永久性地重新排列路径,以便miktex条目晚于要使用的QtCore4.dll导入。(这可能会导致无法将其作为可行选项)

3) 在批处理(或shell)脚本中包装对cx_freeze的调用,并在调用cx_freeze脚本之前操作脚本中的路径


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

您尝试过哪些与路径相关的命令行选项?另外,在运行脚本(
SET PATH=C:\python32…
)之前,您是否尝试过在命令行中修改PATH环境变量?@Jesse只是
build\u exe的
PATH
选项,但这似乎只对python文件而不是dll很重要。如果我从系统路径中删除
MikTeX
安装,它将使用正确的dll(是的,这是我当前的解决方法),但我更喜欢不涉及此类黑客攻击的解决方案。是的,我希望有某种方法操纵二进制文件的路径,使其仅指向python目录。我现在正在使用一个脚本来正确设置环境变量——不是传统的,但至少它应该适用于所有人。