2017-09-24 261 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,因此導致程序崩潰。