2012-06-29 67 views
1

我試圖使用thanos,它在運行時創建擴展模塊。 Thanos經常失敗,因爲它無法導入它在運行時創建的所述擴展。無法加載存在的python擴展模塊

我百思不得其解,爲什麼是這種情況。

在運行時(編譯後) 「cutils_ext」 目錄包含cutils_ext.so

import cutils_ext的作品,但我mport cutils_ext.cutils_ext失敗

ImportError: No module named cutils_ext 

我已經測試了IMP直接。說cutils是導入的cutils_ext包。 當我做:

imp.find_module('cutils_ext', cutils.__path__) 

我再次得到了:

ImportError: No module named cutils_ext 

我完全莫名其妙。有什麼方法可以調試嗎?由於我無法啓動python解釋器(使用picloud),因此我無法在詳細模式下運行python,但是如果我可以在運行時啓用詳細信息,那將有所幫助(還沒有弄清楚如何做到這一點)。

+0

Thanos將其模塊鏈接到的Python版本與您使用的相同嗎?例如,入口點協議在Python 2和Python 3之間不同。 – cdarke

+0

是的,所有的都是python2.7。我甚至可以將擴展名下載到我自己的電腦上並直接加載。無論哪種方式,似乎find_module失敗,甚至在負載發生之前 – UsAaR33

+0

哇,我的壞。看起來我在sys,path的其他地方有另一個cutils_ext,Theano正在預加載它。在Theano上提交了一個bug(https://github.com/Theano/Theano/issues/728) – UsAaR33

回答

2

可以嘗試:

import cutils_ext 
import cutils_ext.cutils_ext 

我不知道爲什麼,但有時我也不得不以進口在它的子模塊導入模塊。

或者,也許,只是也許,第二cutils_ext根本不會在第一cutils_ext存在嗎?

編輯: 等一下...你能不能請把你的文件夾結構和PYTHONPATH中含有什麼?

我想你有這樣的:

upper_folder (a folder) 
    cutils_ext (folder) 
     __init__.py (file) 
     cutils_ext.so (obviously file) 

如果你的PYTHONPATH點upper_folder,那麼你應該能夠做到你所發佈的注意,如果你有這樣的情況__ INIT __.py 必須在那裏。

如果你的PYTHONPATH直接指向cutils_ext文件夾,那麼我認爲你只能導入文件,所以cutils_ext.cutils_ext對解釋器沒有意義(除非你在cutil_ext.so中有一個名爲cutils_ext的變量...)

+0

「或者,也許,也許,第一個cutils_ext中第二個cutils_ext根本就不存在?」好決定。這是非常微妙的,因爲theano從另一個位置預載我的cutils_ext包,然後修補sys.path。因此cutils_ext指的是錯誤的軟件包。呃..感謝您的帖子..幫了很多! – UsAaR33