将 .dll 和 .pyd 文件保存在其他目录中

Posted

技术标签:

【中文标题】将 .dll 和 .pyd 文件保存在其他目录中【英文标题】:Keeping the .dll and .pyd files in other directory 【发布时间】:2014-01-24 20:46:03 【问题描述】:

我正在使用 cx_Freeze 将 Python 脚本转换为 Windows 可执行文件。我正在使用 Scripts 目录中的 cxfreeze 脚本。我希望 cxfreeze 生成的可执行文件位于不同的目录中,而 .dll 和 .pyd 位于不同的目录中。当我试图将它们两个放在不同的目录中时,.exe 没有工作,我得到了

应用程序无法启动,因为找不到 python33.dll。尝试重新安装以解决此问题

我知道这是因为可执行文件和 (dll's & .pyd's) 位于不同的目录中。有没有办法将它们保存在不同的目录中?

我正在使用以下命令来生成可执行文件

C:\Python33\Scripts>cxfreeze C:\Users\me\Desktop\setup.py --target-name=setup.exe --target-dir=C:\Users\me\Desktop\new_dir

【问题讨论】:

Why? 把可执行文件和DLL放在同一个目录有什么问题? 无论如何,在 Windows 上,应用程序会在 %PATH% 上查找 DLL,其中包括 .,但不包括 ../Libs/。您总是可以在可执行文件周围编写一个 .cmd 包装器,例如 PATH = %PATH%;../Libs 然后 ./Executable/MyApp.exe... 但通常这不是一个好主意。 您在 initscript (example here) 中修改环境变量,但我认为它仍然需要在运行 initscript 之前至少找到 python33.dll。 【参考方案1】:

Windows 版 Python 确实要求主 pythonXX.dll(在本例中为 python33.dll)存在于 C:\windows\system32\

在我们将 Python 安装到不同位置、网络驱动器等的所有各种组合中,我们总是不得不使用一个小批处理文件将 pythonXX.dll 复制到 system32 目录中。

我认为 PATH 操作对您不起作用,只需尝试将 dll 复制到 system32 并查看您的问题是否消失。

再一次,如果您安装了另一个版本的 Python 并说 C:\Python33 ,那么基于 Windows 的安装程序将为您执行此操作,您将能够运行您的其他 Python 位置。

【讨论】:

以上是关于将 .dll 和 .pyd 文件保存在其他目录中的主要内容,如果未能解决你的问题,请参考以下文章

cx_Freeze 和移动文件

在Python软件包中包含* .pyd文件怎么打包保存?

python中调用用C++写的dll

如何生成pyc/pyo/pyd文件

浅谈一下pyd文件的逆向

将 Qt DLL 保存在单独的文件夹中