【发布时间】:2017-09-24 15:59:21
【问题描述】:
我正在用 python 编写一个模拟粒子反应的程序,目的是向用户介绍粒子反应。由于 python 在进行必要的处理时速度太慢,我求助于 Cython 以提高速度,它奏效了。我可以将我的.pyx 文件编译成.pyd 文件,该文件可以通过简单的import 语句(即“导入模块”)从python 导入和运行。
但是,程序最终必须在另一个人的计算机上运行,而在这台计算机上,.pyd 文件将无法导入。当我尝试时,我收到此错误消息:
"ImportError: DLL load failed: The specified module could not be found."
.pyd 文件在两台计算机上的位置完全相同,但是,我运行的是 python 3.6,而另一台计算机安装了 python 3.3。另外,我的电脑安装了 Cython,而另一台电脑没有。两台机器都是 32 位的。
我不能简单地将整个程序编译为 .exe 文件,因为另一台计算机在 .exe 文件上有一个块。
我在 Cython 上浏览了 stack 的问题,并且还研究了 Cython 文档,但均无济于事。
有人可以向我解释为什么导入不起作用,以及如何让它起作用吗?关于 .pyd 文件到底是什么以及 python 如何调用它们的一些额外背景也会很好。
编辑:我从名为 main.py 的文件运行程序。在同一个目录中,我有一个名为 main 的文件夹,其中存储了我在模块中使用的代码。 main.py 调用PageManager.py,后者调用ParticleModel.py,后者调用MoveParticles.pyd。 (这三个文件存放在文件夹 main 中)。我用语句
"import main.MoveParticles"
导入 .pyd 文件,该文件可在我的计算机上运行。
【问题讨论】:
-
我已编辑我的问题以提供这些详细信息。不幸的是,我无法上传图片,否则我会向您展示实际文件...
-
你的 setup.py 是什么样子的?
-
#cython setup file from distutils.core import setup from Cython.Build import cythonize setup(ext_modules = cythonize(MYFILEPATH.pyx)) 我编译了我的 .pyx 文件,然后移动了生成的 .pyd 文件从我的 python 文件夹到我的主文件夹内(之前引用过)
-
我对 Windows 没有太多经验,但您的 pyd 将依赖于一些运行时。也许这个运行时没有安装在另一台机器上,或者其他 python 版本使用了另一个运行时?
-
编译器版本不同wiki.python.org/moin/WindowsCompilers,因此不兼容。但即使编译器兼容(Linux),在使用不同的 Python 版本时也可能会遇到问题。我认为最简单的方法是为多个 Python 版本编译一个 pyd 文件。
标签: python python-3.x cython python-import