【发布时间】:2017-08-14 17:40:58
【问题描述】:
我一直在尝试研究如何从 C 脚本(没有 swig 或除 MinGW 之外的任何其他东西)制作 .pyd(Python 扩展模块)文件,并已成功将其构建为 .pyd。
但是当我尝试导入模块时会出现问题。
如果我运行它,模块会成功运行(据我所知),然后会出现一个错误提示 Python Has Stopped Working,它会关闭而不执行程序的其余部分。
这是我的 C 脚本 (test.c):
#include <python.h>
int main()
{
PyInit_test();
return 0;
}
int PyInit_test()
{
printf("hello world");
}
和 Python 脚本(file.py):
import test
print('Run From Python Extension')
我编译了脚本:
gcc -c file.py
gcc -shared -o test.pyd test.c
在命令提示符下编译并使用 python 3.6(在 Windows 10 上运行)时,我找不到任何错误。
我在这个主题上找不到太多信息,我更愿意远离 Cython(我已经知道 C)和 Swig。
任何帮助告诉我出了什么问题都会很棒。
【问题讨论】:
-
.pyd文件是否与尝试import的 Python 脚本位于同一文件夹中? Python 在某些位置以定义的方式搜索模块,可能只是您的库不在它看起来的任何地方。请参阅文档中的Building C and C++ Extensions。 -
你的模块初始化函数没有做任何初始化模块的尝试。它甚至没有正确的返回类型。你读过文档吗?
-
@martineau 我将
.pyd放在与我尝试从中导入它的python 脚本相同的文件夹中。这让我开始思考,然后我把它放在了 Lib 中。从这里我可以导入它而不会出现错误但是'hello world'并没有打印'finished'
标签: python c python-c-api pyd