没有通过python

时间:2017-09-24 15:59:22

标签: python python-3.x cython python-import

我正在编写一个模拟粒子反应的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的堆栈问题,并且还研究了Cython文档,但都无济于事。

有人可以向我解释为什么导入无法正常工作,以及如何让它工作?关于.pyd文件到底是什么以及python如何调用它们的一些额外背景也很好。

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

"import main.MoveParticles" 

导入.pyd文件,该文件适用于我的电脑。

2 个答案:

答案 0 :(得分:1)

根据https://cython-devel.python.narkive.com/gqx0VU3L/importerror-dll-load-failed-the-specified-module-could-not-be-found

<块引用>

只是解释你描述的错误(ImportError: DLL load 失败:找不到),动态链接器找不到 它需要的图书馆。这很可能是失踪的症状 依赖或路径问题。这是我的诊断建议 并解决问题:

缺少依赖项: 一种非常简单的方法来确认您的所有依赖项 cython 模块是 可用是将依赖项walker实用程序[1]指向它,并且 查找丢失的 DLL。

目录结构: 您是从 cython 模块中构建的 .pyd 文件吗? PYTHONPATH(或您当前的 工作目录?如果不是,那就是你的问题。

如果缺少依赖项,请在此处下载依赖项walker:http://www.dependencywalker.com/。然后打开您的 .pyd 文件并稍等片刻。查看主分支中是否缺少文件,并将这些文件添加到包含 python38.dll 的目录中(我的情况是:C:\Users\PC\AppData\Local\Programs\Python\Python38)。

答案 1 :(得分:0)

好的,这里的困难源于对哪些DLL丢失感到困惑。

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

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

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