2016-03-02 73 views
0

當我從一個子模塊以我認爲應該做到的方式導入時,我得到一個ImportError從git子模塊導入(ImportError)

我有以下的包:

pkg/ 
    __init__.py 
    cow.py 
    pizza.py 
    pkg.py 
    components/ 
    components.py 
    otherstuff.py 
    __init__.py 

cow.py:

print "Hello" 
from components import foodle 

components.py:

foodle=5 

__init__的是空的。

我很難將東西放在正確的位置或正確組織它們。當從PKG目錄中,我嘗試

from pkg import foodle 

我收到「導入錯誤:無法導入名foodle」

什麼是安排從子模塊文件,並導入正確的方法是什麼?我已閱讀How to import python file from git submodule;我曾嘗試在 components/__init__.pycow.py,無濟於事。 這個包在git上共享,所以它需要是可移植的。 components實際上是一個git子模塊。

將放在__init__py的組件中似乎可行,但我通常認爲該文件保持空白。

回答

1

我缺少的元素(這是我的理解,可能仍然是不正確的):

  • 如果它是一個包(帶__init__.py),用它從pkg文件夾之外,而不是從內部。也就是說,兩種方式使用包(從外部調用和從內部使用模塊)可能很難建立,所以不要這樣做。這是解決我的問題的主要見解。

  • 用於獲取子模塊和子包的點符號適用於pkg中的文件和文件夾。從pkg.components.components進口從pkg.components

    進口PKG 從pkg.cow進口foodle 導入foodle :因此,從一些其他的文件夾,但在我的道路pkg,我可以調用任何下面的foodle