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

新手上路,请多包涵

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

原文由 chengcj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4.3k
2 个回答

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

.pyd 文件是 dll’s ,但有一些差异。如果你有一个名为 foo.pyd 的 DLL,那么它必须有一个函数 PyInit_foo() 。 You can then write Python import foo , and Python will search for foo.pyd (as well as foo.py , foo.pyc ) and if it finds it , 将尝试调用 PyInit_foo() 来初始化它。您不要将 .exe 与 foo.lib 链接,因为这会导致 Windows 要求 DLL 存在。

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

参考

原文由 Benyamin Jafari - aGn 发布,翻译遵循 CC BY-SA 4.0 许可协议

可以肯定的一件事是在启动 PyCharm 之前设置 PYTHONPATH 环境变量以包含 .pyd 文件所在的目录。我不知道 PyCharm 本身是否有更简单的方法来执行此操作。

原文由 Átila Neves 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题