首页 > 解决方案 > python中的相对导入与本地ang全局库

问题描述

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

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相对导入的信息,但仍然没有找到如何在不彻底改变应用程序组织的情况下解决这个错误。有什么解决办法吗?

标签: pythonpython-3.xpython-import

解决方案


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

sys.path您可以通过hack解决此问题:

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

或此答案中提供了与 setuptools 的有趣替代方案。


推荐阅读