我的应用程序组织如下:
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进行相对导入的信息,但仍然没有找到如何在不彻底改变应用程序组织的情况下解决此错误。有解决方案吗
由于正在执行的脚本将其__name__
设置为__main__
并将其自身定义为位于包的顶层,因此它拒绝识别兄弟目录中的脚本。
你可以用sys.path
hack解决这个问题:
import sys, os
sys.path.insert(0, os.path.abspath('../..'))
或者在qazxsw poi中介绍了setuptools的一个有趣的替代方案。
你有每个文件夹中的this answer脚本吗?
如果不是,则应在每个文件夹中创建一个名为__init__.py
的空脚本。