文件结构是这样的:
config.py
main.py
|---folder
|submodule.py
在 main.py
和 submodule.py
中,我都想使用 config.py
中配置的参数 args
。于是在 main.py
中,
我导入了 args
# main.py
from config import args
同时我在submodule.py
中也导入了config.py
中的args
# submodule.py
from ..config import args
然后就会报错:
ValueError: attempted relative import beyond top-level package
但是我同时想在 main.py
和 submodule.py
中使用 config.py
中配置好的参数,网上有的回答说,可以在 submodule.py
中把上一个文件夹目录添加到系统路径,但是感觉这样的实现很不优雅:
# submodule.py
sys.path.append('..')
请问有没有更优雅一些的方法能实现这个需求?
先看这个:python 当前路径和导包路径问题全解析
在 java、golang、rust 等等语言里面,都喜欢把代码写到 src 文件夹中
但是在 python 中,入口文件(或者称之为启动文件)必须在顶层,这个是 python 的『当前路径和导包路径』特性决定的。
python 的导包锚点,不是『执行命令的那个路径』,而是『被启动文件所在的路径』
所以,你的问题不在『导包导错了』
而是,不应该
python folder/submodule.py
submodule.py
必须在顶层,而不是在 folder 里面『优雅地在子模块中导入上一级的模块?』,因为你用的命令是
python folder/submodule.py
,所以 folder 就是顶层且是最顶层。所以不存在『上一级的模块』,你想要 import 只能 import folder 内的东西,folder 外的东西是不可访问的