Python:C ++的包装器需要访问.dll文件

时间:2015-05-20 01:10:44

标签: python c++ windows dll swig

我使用SWIG为使用SWIG编写的SDK编写了一个Python包装器,并使用Windows 7中的Microsoft Visual Studio 2010构建。

这是成功的,生成 module.py _module.pyd 。但是,此包装器在很大程度上取决于位于PythonXY文件夹外的SDK文件夹中的几个.dll文件。

module.py module.pyd 移动到 PythonXY / Lib / site-packages / 之后,尝试运行导入模块,发生以下错误:

ImportError: DLL load failed: The specified module could not be found.

然后,我尝试使用Python模块 os 中的 os.chdir()方法将Python工作目录更改为.dll文件所在的目录。这次,运行导入模块输出没有错误。我继续访问包装的C ++类和函数,它们工作正常。

我的问题是:

  • 如何“链接”包含.dll文件的路径,以便每当我想使用模块时,我都不必更改工作目录?
  • 除了Python源文件中的Python默认工作目录之外,还有什么办法可以附加额外的工作目录吗? (即不是来自Windows上的PATH配置)
  • 有没有办法可以动态地将包装器与那些.dll文件链接起来?这意味着让文件被复制到另一台机器并且.dll文件存储在不同的绝对路径目录中,导入模块仍然可以工作吗?

关键是我希望在多台Windows机器上尽可能地使这个包装器具有可移植性。

谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了让 module.py 找到 _module.pyd 的解决方案。

基本上,创建一个名为 module.pth 的新文件,并将其保存在与 module.py 相同的目录中。在这种情况下,目录是PythonXY / Lib / site-packages /.

假设您将 _module.pyd 放在名为 _modulelib 的目录(PythonXY / Lib / site-packages / _modulelib /)中,然后是的内容module.pth 应该是这样的:

_modulelib