【问题标题】:Importing from a git sub-module (ImportError)从 git 子模块导入 (ImportError)
【发布时间】:2016-03-02 14:51:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: python git-submodules python-import


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-09
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多