我尝试按照here说明使用Boost.Python。源代码在该网页中。我可以编译,链接这个简单的示例代码,但我无法在python命令行中导入生成的模块。总是错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named hello_ext
我不知道是什么问题因为那个页面只是说:&#34;那就是它。我们已经完成了。我们现在可以将其构建为共享库。现在可以看到生成的DLL。&#34;这是我的建筑环境:
那么,你能告诉我如何在python中导入模块吗?非常感谢。
答案 0 :(得分:2)
(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作为一些评论建议