【发布时间】:2018-03-31 03:21:11
【问题描述】:
我是 Python 包的新手,我正在努力让某些东西正常工作。
我有 3 个包:engine、ui 和 db。我想在其他两个包中使用db。这样做的正确方法是什么?
我不想安装db 包,因为我目前正在同时开发这 3 个包。
谢谢!
目前,我正在尝试通过导入同级包来做到这一点,但这太糟糕了,我不确定这是不是正确的做法。 这个问题与Relative imports in Python 3 或ValueError: attempted relative import beyond top-level package 等大量问题密切相关,但没有一个对我来说是有效的、有效的答案:-(
这是我目前所拥有的:
src/
__init__.py # empty file (is it useful?)
db/
__init__.py # empty file
constants.py
ui/
__init__.py # empty file
index.py
engine/
...some stuff...
这里是 index.py:
from .. import db
print(db.constants.stuff)
但是,运行 cd ui && python3 index.py 或 python3 -m index.py 失败并显示 SystemError: Parent module '' not loaded, cannot perform relative import
当我调整这个项目时,我有时会遇到其他错误,例如ValueError: Attempted relative import in non-package
根据我在https://docs.python.org/3/tutorial/modules.html 上读到的内容,这应该可行,不是吗?
我做错了什么?我应该怎么做(做这么简单的事情)使用来自其他两个包的公共包?
【问题讨论】:
-
你能用
tree之类的东西分享整个项目结构吗?因为当前信息仅显示每个包一个实际文件。也许你在混淆包和模块? -
这是实际的当前结构(
engine当前为空,但最终需要来自db的内容)。所以是的,我目前每个包都有一个模块。但是包裹很快就会增长
标签: python python-3.x