无法导入Boost.Python创建的dll(在Boost Python'快速入门之后)

时间:2017-05-24 14:49:13

标签: python c++ boost dll python-import

我尝试按照here说明使用Boost.Python。源代码在该网页中。我可以编译,链接这个简单的示例代码,但我无法在python命令行中导入生成的模块。总是错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named hello_ext

我不知道是什么问题因为那个页面只是说:&#34;那就是它。我们已经完成了。我们现在可以将其构建为共享库。现在可以看到生成的DLL。&#34;这是我的建筑环境:

  • Windows 7 64位,我是管理员并以管理员身份运行cmd
  • 提升版本为1.64.0(从here下载的预编译二进制文件boost_1_64_0-msvc-14.0-64.exe)
  • python版本是2.7.13,64位
  • Visual Studio 2015,Update 3
  • 目标是DLL
  • 项目名称为ConsoleApplication1,因此输出为ConsoleApplication1.dll。我已将文件名更改为hello_ext.dll,但错误相同。
  • 我使用x64配置构建,我已经使用dumpbin验证输出的ConsoleApplication1.dll确实是64位
  • 我已将路径...... \ ConsoleApplication1 \ x64 \ Release添加到python命令行内的sys.path中。

那么,你能告诉我如何在python中导入模块吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

我自己解决了这个问题。感谢jagerman的有用建议。

(1)只需将输出文件名从ConsoleApplication1.dll更改为hello_ext.pyd即可。您可以通过将Pages-&gt; General-&gt; Target Extension设置为“.pyd”来自动执行此重命名。确保文件hello_ext.pyd位于python的搜索路径中。你可以把它扔到C:\ Python27 \ DLLs,这是python的内置搜索路径之一。

(2)现在您将遇到另一个导入错误:DLL加载失败:找不到指定的模块。如果仔细观察hello_ext.pyd的文件大小,你可能会注意到有线的东西 - 它只有19KB。这意味着它不包含导入python所需的所有内容,因此python必须找到缺少的部分才能正确导入它。是的,您可能猜到 - 唯一可能缺少的是Boost.Python库,因此将路径添加到PATH环境变量中 - 对我来说,它是C:\ local \ boost_1_64_0 \ lib64-msvc-14.0。

然后问题解决了。注意:其他相关问题中的一些答案可能会建议构建为静态库,这样,您将遇到另一个导入错误:DLL加载失败:%1不是有效的Win32应用程序。所以只需构建为DLL。 PS:你不需要在Property Pages-&gt; Linker-&gt; Input-&gt;附加依赖项中指定boost_python-vc140-mt-1_64.lib或boost_python-vc140-mt-gd-1_64.lib作为一些评论建议