从另外两个包导入一个公共包(python3)

时间:2017-10-19 06:31:09

标签: python python-3.x

我是Python软件包的新手,我正在努力让事情变得有效。 我有3个包:engineuidb。我希望从其他两个包中使用db。这样做的正确方法是什么?

我不想安装db软件包,因为我目前正在同时开发3个软件包。

谢谢!

目前,我正试图通过导入兄弟套餐来实现这一目标,但它太糟糕了,我不确定这是否是正确的方法。 这个问题与Relative imports in Python 3ValueError: 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.pypython3 -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上看到的,这应该有用,不应该吗?

我做错了什么?我该怎么做(做这么简单的事情)使用另外两个包中的公共包?

1 个答案:

答案 0 :(得分:0)

__ init__.py非常有用,即使它是空的。它告诉python文件夹是python包。

我认为你需要的是修改系统路径。例如,假设您要将constants.py导入index.py,index.py将如下所示:

import sys
sys.path.append("..")
from db import constants