Python 使用cython扩展一旦编译[在Windows下],如何使用.pyd';s
我习惯于在Linux下使用Cython编译自制的python扩展。在Linux上,我使用distutils生成一个“myext.so”,然后我可以简单地添加到我的Python 使用cython扩展一旦编译[在Windows下],如何使用.pyd';s,python,distutils,pythonpath,pyd,Python,Distutils,Pythonpath,Pyd,我习惯于在Linux下使用Cython编译自制的python扩展。在Linux上,我使用distutils生成一个“myext.so”,然后我可以简单地添加到我的PYTHONPATH中,并获得可用的import myextpython调用 现在,我正试图让它在Windows7下工作(使用Cython0.18)。 我成功地运行了distutils,现在得到了一个myext.pyd文件。但是在windows下,仅仅添加“myext.pyd”的路径似乎是不够的。“myext.py”应该是什么样子,或者
PYTHONPATH
中,并获得可用的import myext
python调用
现在,我正试图让它在Windows7下工作(使用Cython0.18)。
我成功地运行了distutils,现在得到了一个myext.pyd
文件。但是在windows下,仅仅添加“myext.pyd”的路径似乎是不够的。“myext.py”应该是什么样子,或者换句话说,在Python(2.7)安装中获得扩展的过程是什么
注意:在将包含“myext.pyd”的目录添加到PYTHONPATH之后,我仍然得到:
python BdmLsim4.py -i model.xml
Traceback (most recent call last):
File "BdmLsim4.py", line 6, in <module>
import myext
ImportError: DLL load failed: module not found.
python BdmLsim4.py-i model.xml
回溯(最近一次呼叫最后一次):
文件“BdmLsim4.py”,第6行,在
导入myext
ImportError:DLL加载失败:找不到模块。
非常感谢。您链接的文档中清楚地写着: 请注意,foo.pyd的搜索路径是
PYTHONPATH
,而不是相同的路径
作为Windows用于搜索foo.dll
的路径。还有,foo.pyd
运行程序时不需要在场,但是如果您链接了
使用dll编程时,dll是必需的。当然,foo.pyd是
如果要说导入foo,则必须输入。在DLL中,链接被声明
在源代码中使用uu declspec(dllexport)。在.pyd中,链接是
在可用函数列表中定义
因此,您应该将.pyd
文件放在python的安装目录(站点包
)中,或者可以修改环境变量PYTHONPATH
并添加放置.pyd
的目录
另一种选择是使用
.pth
文件扩展PYTHONPATH
在importorror
之前的sys.path
是什么样子?AFAIK将目录放置在PYTHONPATH
中是您必须做的一切,因此可能您没有正确添加目录。Sys.path=[…,'D:\\02\u DEV\\EVOLAB\\EVOLAB-2013-05-02\\ECLIPSE-WS\u ELP\\EVOLAB cython\\src\\Spatial','D:\\02\u DEV\\EVOLAB\\EVOLAB-2013-05-02\\ECLIPSE-WS\u ELP\\EVOLAB cython\\setup','C:\\Windows\\system32\\python27.zip','C:\\python27\\DLLs',]其中'D:\\02\u DEV\\EVOLAB\\EVOLAB-2013-05-02\\ECLIPSE-WS\u ELP\\EVOLAB cython\\setup'是my.pyd.的位置,我检查了cython生成的“myext.cpp”,其中包含所需的“PyMODINIT\u FUNC initmyext(void);/*proto*/”指令。因此路径似乎没有问题。可能是我的.pyd文件编译得不好。你认为呢?你在使用Eclipse吗?你是否尝试从命令提示符而不是Eclipse内部运行程序?是的,我在使用Eclipse,但我也尝试了直接命令行……你是否尝试从模块所在的目录导入模块?i、 e.cd-D:\\02\u DEV等;python导入myext
。