我正在使用PyCharm。我在以下位置有一个python脚本:
C:\Users\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代码行上,我会得到以下错误消息:
"No module named PyTbl"
型
如何将.pyd
文件导入Python脚本?
4条答案
按热度按时间jfgube3f1#
.pyd
基本上是Windows.dll
文件。.pyd
文件是dll’s
,但有一些区别。如果您有一个名为foo.pyd的DLL,那么它必须具有函数PyInit_foo()
。然后您可以编写Pythonimport 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
中,链接在可用函数列表中定义。参考
2nc8po8w2#
有一件事可以肯定的是,在启动PyCharm之前设置PYTHONPATH环境变量,以包括.pyd文件所在的目录。我不知道PyCharm本身是否有更简单的方法来完成这一点。
dluptydi3#
如果你有一个名为foo.py d的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。当然,如果您想说导入foo,则需要foo.pyd。在DLL中,在源代码中使用__declspec声明链接(dllexport)。在.pyd中,链接定义在可用函数列表中。
https://docs.python.org/3/faq/windows.html#is-a-pyd-file-the-same-as-a-dll
7gcisfzg4#
例如,如果当前目录中存在“test.pyd”。
main.py
字符串
这样就可以加载并使用test.pyd了,并且在pycharm中成功运行了2023.12.1!