0

我习惯于使用 Cython 在 Linux 下编译自制的 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)将路径添加到“myext.pyd” windows下还不够。“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.

非常感谢。

4

1 回答 1

1

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

请注意,搜索路径foo.pydPYTHONPATH与 Windows 用于搜索的路径不同foo.dll。此外,运行程序不需要存在 foo.pyd,而如果将程序与 dll 链接,则需要 dll。当然,如果要说 import foo,则需要 foo.pyd。在 DLL 中,链接在源代码中使用 __declspec(dllexport) 声明。在 .pyd 中,链接是在可用函数列表中定义的。

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

另一种选择是使用.pth文件来扩展PYTHONPATH.

于 2013-05-07T07:09:17.283 回答