2017-04-25 67 views
1

我有幾個嵌套模塊的程序包:導入從模塊的功能故障,但類可以被導入

somepackage/ 
    module1/ 
    __init__.py 
    module2/ 
     __init__.py 
     to_be_imported.py 
setup.py 

我已經安裝了該封裝的python setup.py developto_be_imported.py文件包含幾個類和一個方法(在類之後,因爲該方法使用類的某些類方法)。打開一個IPython的控制檯後,下面的導入工作:

from somepackage.module1.module2.to_be_imported import SomeClass 

但是這一次失敗,導入錯誤:

from somepackage.module1.module2.to_be_imported import my_method 

而且,如果我導入文件

from somepackage.module1.module2 import to_be_imported 

和打印導入的文件內容,它也打印my_method

我對什麼導致導入錯誤感到困惑,有沒有人遇到過這樣的問題?

+0

你確定你輸入'to_be_imported'內'模塊2/__ __初始化與py':'從.somepackage.module1.module2.to_be_imported進口*' – mertyildiran

+0

對不起,我在這個問題一個錯字,不忘加上.to_be_imported前兩個進口,我的__init__.py文件是空的 –

回答

2

請注意module2用詞不當,因爲它實際上不是模塊而是子包裝。

您有權訪問SomeClass,因爲它已從to_be_imported導入module2.__init__.py。您可以打開module2.__init__.py來確認這一點。

要訪問該功能,您應該指定完整路徑:

from somepackage.module1.module2.to_be_imported import my_method 

,或者對其進行導入module2.__init__.py使用更短的路徑。

+0

請看我更新的問題,我沒有使用完整的路徑,我的問題是不正確的。 –

0

事實證明,我的問題是我的模塊被緩存到我的IPython會話中。我稍後添加了my_method,所以緩存的版本沒有包含它,但是當我打印文件時,它打印了最新版本。更多關於主題: Prevent Python from caching the imported modules

總結:控制檯重新啓動是我所需要的。