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