如何正确获取Python相对导入

时间:2019-10-28 10:24:46

标签: python python-3.x python-import

我有一个自定义的Python库(“ common ”),该库正在从多个Python项目中导入和使用。
该中央库具有以下结构:

label.configure(background='yellow')
label.configure(foreground='red')

我们的自定义库位于/common /__init__.py /wrapper.py /util /__init__.py /misc.py 的中央位置,因此在我的Python项目中,我有一个/data/Development/Python文件,以便包含我们的lib:

.env

那很好,例如,我可以做类似的事情:

PYTHONPATH="/data/Development/Python"

但是,现在我想利用from common.util import misc 中代码中的MyClass中的类common/wrapper.py。因此,我在common/util/misc.py中尝试了以下导入:

misc.py

但这会导致以下错误:

from ..wrapper import MyClass

有什么想法我在这里做错了吗?

PS:当我改为使用Exception has occurred: ImportError cannot import name 'MyClass' 并从代码中使用from .. import wrapper时,它可以正常工作。那有意义吗?

2 个答案:

答案 0 :(得分:1)

正在寻找wrapper,否则您将收到另一个错误:

>>> from wibble import myclass
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'wibble'

因此,看来wrapper不包含MyClass。错字?

答案 1 :(得分:0)

“但是,现在我想从common / util / misc.py中的代码中使用common / wrapper.py中的MyClass类。因此,我在misc.py中尝试了以下导入:”

如果您执行export PYTHONPATH=~/common

要导入MyClass,您将执行以下操作:

from wrapper import MyClass

由于已将common添加到根文件夹,因此utils已在您的路径中,因为它位于您的根文件夹中。

类似地,如果您想从包装器导入,则将执行from utils.misc import ThisClass,因为utils.misc已经在根文件夹common