python怎么优雅地在子模块中导入上一级的模块?
文件结构是这样的:
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('..')
请问有没有更优雅一些的方法能实现这个需求?
回复
1个回答

test
2024-07-14
在 java、golang、rust 等等语言里面,都喜欢把代码写到 src 文件夹中
但是在 python 中,入口文件(或者称之为启动文件)必须在顶层,这个是 python 的『当前路径和导包路径』特性决定的。
python 的导包锚点,不是『执行命令的那个路径』,而是『被启动文件所在的路径』
所以,你的问题不在『导包导错了』
而是,不应该 python folder/submodule.py
submodule.py
必须在顶层,而不是在 folder 里面
『优雅地在子模块中导入上一级的模块?』,因为你用的命令是 python folder/submodule.py
,所以 folder 就是顶层且是最顶层。所以不存在『上一级的模块』,你想要 import 只能 import folder 内的东西,folder 外的东西是不可访问的
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容