我的应用程序的组织方式如下:
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 组织的方法来解决此错误。有解决办法吗?
答案 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
的空脚本。