我正在使用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脚本?
答案 0 :(得分:3)
.pyd
基本上是Windows .dll
文件。
.pyd
文件是dll’s
,但有一些区别。如果您有一个名为foo.pyd的DLL,则它必须具有一个函数PyInit_foo()
。然后,您可以编写Pythonimport foo
,Python将搜索foo.pyd
(以及foo.py
,foo.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)
中,链接在可用功能列表中定义。
答案 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