如何将.pyd文件导入为python模块?

时间:2018-05-10 17:04:59

标签: python pyd

我正在使用PyCharm。我在以下位置有一个python脚本:

C:\用户\ XYZ \ PycharmProjects \ PROJECT1 \ playground.py

playground.py只有一行代码,如下所示

import PyTbl

在" Project1"文件夹那里的另一个文件: C:\ Users \用户XYZ \ PycharmProjects \ PROJECT1 \ PyTbl.pyd

当我运行python脚本playground.py时出现以下错误:

ImportError: numpy.core.multiarray failed to import
Traceback (most recent call last):
  File "C:/Users/XYZ/PycharmProjects/Project1/playground.py", line 1, in <module>
    import PyTbl
SystemError: initialization of PyTbl raised unreported exception

如果我将鼠标悬停在PyCharm编辑器的playground.py中的python代码行上,我会收到以下错误消息:

&#34;没有名为PyTbl&#34;

的模块

知道如何将.pyd文件导入python脚本?

3 个答案:

答案 0 :(得分:3)

.pyd基本上是Windows .dll文件。

.pyd文件是dll’s,但有一些区别。如果您有一个名为foo.pyd的DLL,则它必须具有一个函数PyInit_foo()。然后,您可以编写Python import foo,Python将搜索foo.pyd(以及foo.pyfoo.pyc),如果找到,将尝试调用{{1 }}对其进行初始化。您不要将.exe与PyInit_foo()链接,因为那样会导致Windows要求该DLL出现。

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

Reference

答案 1 :(得分:0)

肯定会起作用的一件事是在启动PyCharm以包括.pyd文件所在的目录之前设置PYTHONPATH环境变量。我不知道在PyCharm本身中是否有一种更简单的方法。

答案 2 :(得分:0)

<块引用>

如果你有一个名为 foo.pyd 的 DLL,那么它必须有一个函数 PyInit_foo()。然后,您可以编写 Python “import foo”,Python 将搜索 foo.pyd(以及 foo.py、foo.pyc),如果找到,将尝试调用 PyInit_foo() 对其进行初始化。您不要将 .exe 与 foo.lib 链接,因为这会导致 Windows 要求存在 DLL。

<块引用>

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

https://docs.python.org/3/faq/windows.html#is-a-pyd-file-the-same-as-a-dll