如何在没有 sys.path 的情况下从父目录导入模块?

Eja*_*jaz 5 python python-3.6

我正在尝试从父包调用模块。

我的项目结构 -

be/
  __init__.py
  api/
    __init__.py
    models.py
  alembic/
    env.py
Run Code Online (Sandbox Code Playgroud)

models.py内部调用方法env.py

我试过如下,

from api.models import Base
Run Code Online (Sandbox Code Playgroud)

我收到错误 - ImportError: No module named 'api'

我想通过将alembic目录放在api目录中来重组,但仍然无法导入models.

使用sys.path看起来很hacky,如果我应该改变项目结构,那么请提出建议。

meT*_*sky 3

您可以使用相对导入

在里面env.py,你只需要from ..api.models import Base

如果您不想使用相对导入,也可以尝试绝对导入,例如

from be.api.models import Base

前提是您已将其PYTHONPATH导出be

path_to_be=''
export PYTHONPATH=$path_to_be:$PATH
Run Code Online (Sandbox Code Playgroud)