python 中的相对导入与本地 ang 全局库

Relative imports in python with local ang global libraries

我的应用程序是这样组织的:

apps/
    code/
        libglobal/
            funglobal.py
    tests/
        project/
            liblocal/
                funlocal.py
            main.py

main.py我有:

import liblocal.funlocal

funlocal.py中,我尝试导入funglobal.py

from ....code.libglobal import funglobal

当我运行

python3 -B tests/project/main.py

我得到一个错误:

from ....code.libglobal import funglobal
ValueError: attempted relative import beyond top-level package

我已经阅读了很多关于 python3 的相对导入的信息,但仍然没有找到如何在不更改 的情况下解决此错误的方法apps 彻底组织。有什么解决办法吗?

每个文件夹中都有 __init__.py 脚本吗?

如果不是,您应该在每个文件夹中创建一个名为 __init__.py 的空脚本。

由于正在执行的脚本将其 __name__ 设置为 __main__ 并将其自身定义为包的顶层,因此它拒绝识别兄弟目录中的脚本。

您可以使用 sys.path hack 解决此问题:

import sys, os
sys.path.insert(0, os.path.abspath('../..'))

或在 this answer 中介绍了与设置工具的替代方案。