Cython pyd文件未通过python导入

Cython pyd文件未通过python导入,python,python-3.x,cython,python-import,Python,Python 3.x,Cython,Python Import,我正在用python编写一个模拟粒子反应的程序,目的是教用户粒子反应。由于python在进行必要的处理时太慢,我求助于Cython以获得速度提升,它起到了很大的作用。我可以将我的.pyx文件编译成一个.pyd文件,该文件可以通过一个简单的import语句(即“导入模块”)从python导入和运行 但是,该程序最终必须在另一个人的计算机上运行,并且在此计算机上,.pyd文件将不会导入。当我尝试时,我收到以下错误消息: "ImportError: DLL load failed: The speci

我正在用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
文件上有一个块

我浏览了stack关于Cython的问题,也研究了Cython文档,但都没有结果

有人能给我解释一下为什么导入不起作用,以及我如何让它起作用吗?关于
.pyd
文件到底是什么以及python如何调用它们的一些额外背景知识也很好

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

"import main.MoveParticles" 

要导入在我的计算机上工作的.pyd文件。

好的,这里的困难来自于对缺少哪个DLL的混淆

我(天真地)假设,因为我试图导入一个.pyd文件,它本质上是一个DLL,(),这是导致错误的原因

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

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

根据

仅解释您描述的错误(ImportError:DLL加载 失败:找不到),动态链接器找不到 它所需要的图书馆。这很可能是失踪的症状 依赖关系或路径问题。以下是我的诊断建议 以及解决问题:

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

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


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

我编辑了我的问题以提供这些详细信息。不幸的是,我无法获得要上载的图像,否则我会向您显示实际文件…setup.py的外观如何?#来自distutils.core的cython安装文件从cython.Build导入cythonize安装程序(ext_modules=cythonize(MYFILEPATH.pyx))我编译了.pyx文件,然后将生成的.pyd文件从python文件夹移动到主文件夹中(前面提到过)我对Windows没有太多经验,但您的pyd将依赖于某些运行时。可能此运行时未安装在其他计算机上,或者其他python版本使用其他运行时?编译器版本不同,因此不兼容。但即使编译器兼容(Linux)使用不同的Python版本时可能会遇到问题。我认为最简单的方法是为多个Python版本编译一个pyd文件。