2016-03-02 71 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