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

问题描述 投票:2回答:2

我的应用程序组织如下:

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进行相对导入的信息,但仍然没有找到如何在不彻底改变应用程序组织的情况下解决此错误。有解决方案吗

python python-3.x python-import
2个回答
2
投票

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

你可以用sys.path hack解决这个问题:

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

或者在qazxsw poi中介绍了setuptools的一个有趣的替代方案。


0
投票

你有每个文件夹中的this answer脚本吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.