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

w8rqjzmb  于 5个月前  发布在  PyCharm
关注(0)|答案(4)|浏览(94)

我正在使用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脚本?

jfgube3f

jfgube3f1#

.pyd基本上是Windows .dll文件。
.pyd文件是dll’s,但有一些区别。如果您有一个名为foo.pyd的DLL,那么它必须具有函数PyInit_foo()。然后您可以编写Python import foo,Python将搜索foo.pyd。(以及foo.pyfoo.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中,链接在可用函数列表中定义。
参考

2nc8po8w

2nc8po8w2#

有一件事可以肯定的是,在启动PyCharm之前设置PYTHONPATH环境变量,以包括.pyd文件所在的目录。我不知道PyCharm本身是否有更简单的方法来完成这一点。

dluptydi

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

7gcisfzg

7gcisfzg4#

例如,如果当前目录中存在“test.pyd”。
main.py

import sys

# Add the current directory to sys.path
sys.path.append('.')
import test

字符串
这样就可以加载并使用test.pyd了,并且在pycharm中成功运行了2023.12.1!

相关问题