编译后使用cython扩展[在Windows下],如何使用.pyd?

时间:2013-05-07 06:41:35

标签: python distutils pythonpath pyd

我用于在Linux下使用Cython编译自制的python扩展。在Linux上,我使用distutils生成一个“myext.so”,然后我可以简单地添加到我的PYTHONPATH并获得import myext python调用。

现在,我试图让它在Windows 7下工作(使用Cython 0.18)。 我成功地运行了distutils,现在我得到一个myext.pyd文件。但似乎(http://docs.python.org/2/faq/windows.html#is-a-pyd-file-the-same-as-a-dll)在Windows下添加“myext.pyd”的路径是不够的。 “myext.py”应该是什么样的,换句话说,在我的Python(2.7)安装中可以获得扩展的程序是什么。

注意:在将包含“myext.pyd”的目录添加到PYTHONPATH后,我仍然得到:

python BdmLsim4.py -i model.xml
Traceback (most recent call last):
  File "BdmLsim4.py", line 6, in <module>
    import myext
ImportError: DLL load failed: module not found.

非常感谢。

1 个答案:

答案 0 :(得分:1)

它清楚地写在您链接的文档中:

  

请注意 foo.pyd的搜索路径为PYTHONPATH ,不一样   作为Windows用于搜索foo.dll的路径。另外,foo.pyd   不需要出现来运行你的程序,而如果你链接你的程序   用dll编程,dll是必需的。当然,foo.pyd是   如果你想说导入foo,则需要。在DLL中,声明了链接   在源代码中使用__declspec(dllexport)。在.pyd中,链接是   在可用功能列表中定义。

所以你应该将你的.pyd文件放在python的安装目录(site-packages)中,或者你可以修改环境变量PYTHONPATH并添加.pyd所在的目录放置。

另一种方法是使用.pth文件来扩展PYTHONPATH