【发布时间】:2023-03-16 15:44:01
【问题描述】:
我习惯于在 Linux 下使用 Cython 编译自制的 python 扩展。在 Linux 上,我使用 distutils 生成一个“myext.so”,然后我可以简单地将其添加到我的PYTHONPATH 并获得可用的import myext python 调用。
现在,我正试图让它在 Windows 7 下运行(使用 Cython 0.18)。
我成功地运行了 distutils,现在我得到了一个 myext.pyd 文件。但似乎 (http://docs.python.org/2/faq/windows.html#is-a-pyd-file-the-same-as-a-dll) 在 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.
非常感谢。
【问题讨论】:
-
sys.path在ImportError之前的样子是什么? AFAIK 将目录放在PYTHONPATH中是您必须做的一切,所以也许您没有正确添加目录。 -
Sys.path = [..., 'D:\\02_DEV\\EVOLAB\\EVOLAB-2013-05-02\\ECLIPSE-WS_ELP\\evolab-cython\\src\\空间', 'D:\\02_DEV\\EVOLAB\\EVOLAB-2013-05-02\\ECLIPSE-WS_ELP\\evolab-cython\\setup', 'C:\\Windows\\system32\\python27.zip ', 'C:\\Python27\\DLLs', ...] 其中 'D:\\02_DEV\\EVOLAB\\EVOLAB-2013-05-02\\ECLIPSE-WS_ELP\\evolab-cython\\setup'是我的 .pyd 的位置。我检查了 Cython 生成的“myext.cpp”,其中包含所需的“PyMODINIT_FUNC initmyext(void); /*proto*/”指令。所以路径似乎没问题。可能是我的 .pyd 文件没有编译好。你怎么看?
-
您在使用 Eclipse 吗?您是否尝试从命令提示符而不是在 Eclipse 中运行程序?
-
是的,我正在使用 Eclipse,但我也尝试了直接命令行...
-
您是否尝试从其所在目录导入您的模块?即
cd D:\\02_DEV etc.; python import myext.
标签: python distutils pythonpath pyd