【发布时间】:2015-05-20 01:10:43
【问题描述】:
我为使用 SWIG 用 C++ 编写并在 Windows 7 中使用 Microsoft Visual Studio 2010 构建的 SDK 制作了 Python 包装器。
这很成功,生成了 module.py 和 _module.pyd。然而,这个包装器在很大程度上依赖于 PythonXY 文件夹之外的 SDK 文件夹中的几个 .dll 文件。
在我将 module.py 和 module.pyd 移动到 PythonXY/Lib/site-packages/ 后,并尝试运行 import module,出现如下错误:
ImportError: DLL load failed: The specified module could not be found.
然后,我尝试使用 Python 模块 os 中的 os.chdir() 方法将 Python 工作目录更改为 .dll 文件所在的目录。这一次,运行 import module 输出没有错误。我继续访问封装的 C++ 类和函数,它们工作得很好。
我的问题是:
- 如何“链接”包含 .dll 文件的路径,以便每当我想使用 模块 时,我都不必更改工作目录?
- 除了 Python 源文件中的 Python 默认工作目录之外,还有什么方法可以附加其他工作目录? (即不是来自 Windows 上的 PATH 配置)
- 有什么方法可以将包装器与这些 .dll 文件动态链接?这意味着假设文件被复制到另一台机器并且 .dll 文件存储在不同的绝对路径目录中,导入模块仍然可以工作吗?
关键是我想让这个包装器尽可能地便携,跨多个 Windows 机器。
谢谢。
【问题讨论】:
-
你试过把它放在 Windows 会寻找 DLL 的地方吗?
-
如何检查 Windows 会在哪些目录中查找 DLL?
标签: python c++ windows dll swig