从git子模块导入(ImportError)

时间:2016-03-02 14:51:56

标签: python git-submodules python-import

当我从一个子模块导入时,我得到一个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:无法导入名称foodle”

从子模块排列文件和导入的正确方法是什么?我看过How to import python file from git submodule;我曾尝试在sys.pathcomponents/__init__.py中弄乱cow.py,但无济于事。 这个包在git上共享,因此它需要是可移植的。 components实际上是一个git子模块。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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