我有以下简单的项目和包结构:
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
我在from...import
尝试了多次使用__init__.py
,但无济于事!以下是我尝试放入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
中放置什么,以便用户可以直接从我的包中导入类Three和Four,而无需知道它们存在于哪个模块中?换句话说,如何展平模块b
的命名空间?
编辑:使用Python 3.3,但我可能会切换到3.4,我可能还需要支持2.7。
编辑:添加了TL; DR
编辑:明确重新格式化问题
编辑:更新标题以反映清晰度:)
编辑:添加了对类似(已解决)问题的引用,这个问题在这种情况下似乎不起作用
答案 0 :(得分:0)
你不使用点:它就是那么简单。
在b.py中:
from a import Three, Four
您的程序似乎正在寻找package.b
,而不仅仅是b。这可能意味着使用了。将无法正常工作
from .a import
File "/storage/emulated/0/com.hipipal.qpyplus/scripts3/.last_tmp.py", line 1, in <module>
from .a import One, Two
ValueError: Attempted relative import in non-package
from a import
的输出(预期)
1
2