【发布时间】:2014-08-09 21:56:55
【问题描述】:
我有以下简单的项目和包结构:
Project/
package/
__init__.py
a.py
class One: ...
class Two: ...
b.py
from . import a
class Three: ...
class Four: ...
我希望用户能够这样使用它:
import package
# or
from package import Three, Four
from package.a import One, Two
# or
from package import a
我在__init__.py 中尝试了from...import 的几种用法,但无济于事!这是我尝试在Project/package/__init__.py 中输入的内容的摘要,以及他们在尝试import package 时产生的错误:
from .b import Three, Four
# ImportError: No module named 'package.b'
---
from b import Three, Four
# ImportError: No module named 'b'
---
from package.b import Three, Four
# ImportError: cannot import name Three
我以为我在上一个项目中已经解决了这个问题...(参见:this answer)
TL;DR
我需要在Project/package/__init__.py 中添加什么,以便用户可以直接从我的包中导入类 3 和 4,而无需知道它们存在于哪个模块中?换句话说,我怎样才能扁平化模块b的命名空间?
编辑:使用 Python 3.3,但我可能会切换到 3.4,我可能还需要支持 2.7。
编辑:添加了一个 TL;DR
编辑:为了清晰起见,对问题进行了重大重新格式化
编辑:更新标题以反映清晰度:)
编辑:添加了对在这种情况下似乎不起作用的类似(已解决)问题的引用
【问题讨论】:
-
您可能有循环导入。
a.py中是否有任何导入? -
不,所有导入都如上:-)
标签: python import structure packages importerror