2017-09-24 41 views
1

我正在用python编写一个程序来模拟粒子的反应,目的是教导用户关于粒子反应。由于python在进行必要的处理时速度太慢,我转向Cython寻求提高速度的方法,并且它很有用。我可以将我的.pyx文件编译为.pyd文件,该文件可以通过简单的import语句(即“导入模块”)从python导入和运行。Cython pyd文件不能通过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的堆栈问题,并且还研究了Cython文档,但都无济于事。

有人可以向我解释为什么导入不起作用,以及我如何才能使其工作?关于.pyd文件的一些额外背景以及python如何调用它们也会很好。

编辑:我从名为main.py的文件运行该程序。在同一个目录中,我有一个名为main的文件夹,它存储我在模块中使用的代码。 main.py调用PageManager.py,调用ParticleModel.py,调用MoveParticles.pyd。 (这三个文件存储在文件夹主文件夹中)。我使用声明

"import main.MoveParticles" 

导入.pyd文件,它在我的电脑上工作。

+0

我编辑了我的问题以提供这些详细信息。不幸的是,我无法获取图片上传,否则我会告诉你实际的文件... –

+0

你的setup.py的外观如何?从进口distutils.core设置 从Cython.Build进口cythonize – ead

+0

#cython设置文件 设置(ext_modules = cythonize(MYFILEPATH.pyx)) 我编译我.pyx文件,然后从移动所得.pyd文件我的Python文件夹到我的主文件夹(以前引用) –

回答

0

好的,这里的困难源于混淆了哪个DLL丢失。

我曾(天真地)认为,因为我试图导入.pyd文件,它本质上是一个DLL,(Python C extension: Use extension PYD or DLL?),这是导致错误。

但是,实际导致错误的原因是缺少运行我的.pyd文件所需的DLL。我通过使用不同版本的python(准确地说是3.5)解决了这个问题,并且在重新编译我的.pyd文件以使用python 3.5之后,该应用程序能够工作。

摘要:计算机试图运行我的文件缺少一些必要的DLL,因此导致程序崩溃。