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

时间:2019-04-16 12:09:39

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

我的应用程序的组织方式如下:

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 组织的方法来解决此错误。有解决办法吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

或{setupsetstools}的替代设置在this answer中提出。

答案 1 :(得分:0)

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

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