Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用cython扩展一旦编译[在Windows下],如何使用.pyd';s_Python_Distutils_Pythonpath_Pyd - Fatal编程技术网

Python 使用cython扩展一旦编译[在Windows下],如何使用.pyd';s

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”应该是什么样子,或者

我习惯于在Linux下使用Cython编译自制的python扩展。在Linux上,我使用distutils生成一个“myext.so”,然后我可以简单地添加到我的
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