python 中的相对导入与本地 ang 全局库
Relative imports in python with local ang global libraries
我的应用程序是这样组织的:
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 彻底组织。有什么解决办法吗?
每个文件夹中都有 __init__.py
脚本吗?
如果不是,您应该在每个文件夹中创建一个名为 __init__.py
的空脚本。
由于正在执行的脚本将其 __name__
设置为 __main__
并将其自身定义为包的顶层,因此它拒绝识别兄弟目录中的脚本。
您可以使用 sys.path
hack 解决此问题:
import sys, os
sys.path.insert(0, os.path.abspath('../..'))
或在 this answer 中介绍了与设置工具的替代方案。
我的应用程序是这样组织的:
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 彻底组织。有什么解决办法吗?
每个文件夹中都有 __init__.py
脚本吗?
如果不是,您应该在每个文件夹中创建一个名为 __init__.py
的空脚本。
由于正在执行的脚本将其 __name__
设置为 __main__
并将其自身定义为包的顶层,因此它拒绝识别兄弟目录中的脚本。
您可以使用 sys.path
hack 解决此问题:
import sys, os
sys.path.insert(0, os.path.abspath('../..'))
或在 this answer 中介绍了与设置工具的替代方案。