当我从一个子模块导入时,我得到一个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.path
和components/__init__.py
中弄乱cow.py
,但无济于事。
这个包在git上共享,因此它需要是可移植的。 components
实际上是一个git子模块。
将from components import *
放入组件中的__init__py
似乎可行,但我认为通常该文件仍为空。
答案 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