从 git 子模块导入 (ImportError)

Importing from a git sub-module (ImportError)

当我以我认为应该这样做的方式从子模块导入时,我得到一个 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

我得到"ImportError: cannot import name foodle"

排列文件和从子模块导入的正确方法是什么?我已阅读 ;我试过在 components/__init__.pycow.py 中弄乱 sys.path,但无济于事。 此包在 git 上共享,因此需要便携。 components 实际上是一个 git 子模块。

from components import * 放入 components/ 的 __init__py 中似乎可行,但我认为通常该文件保持为空。

我遗漏的元素是(这些是我的解释,可能仍然不正确):

  • 如果它是一个包(带有 __init__.py),请从 pkg 文件夹外部而不是内部使用它。即,以两种方式使用包(从外部调用和从内部使用模块)可能很难设置,所以不要。这是解决我的问题的主要见解。

  • 用于获取子模块和子包的点表示法适用于 pkg 中的文件和文件夹。因此,从其他文件夹,但在我的路径中有 pkg,我可以调用以下任何一个:

    import pkg
    from pkg.cow import foodle
    from pkg.components import foodle
    from pkg.components.components import foodle