Python应用子包间共享配置文件的报错问题求助
解决Python子包导入根目录配置文件的问题
问题根源
你遇到的ImportError是因为:当直接运行子包里的文件(比如one_kind_of_motor.py)时,Python会把它当成独立脚本,不认为它属于项目的包结构,所以相对导入(from .. import CONFIG)找不到父包。
通俗易懂的解决方案
方案1:手动把根目录加入Python搜索路径(最省心,适合新手)
在每个需要调用CONFIG的子包文件开头,添加一段代码,让Python能找到根目录的CONFIG.py:
import sys import os # 获取当前文件所在的文件夹路径(比如motors文件夹) current_folder = os.path.dirname(os.path.abspath(__file__)) # 往上跳一级,得到项目根目录 root_folder = os.path.dirname(current_folder) # 把根目录加入Python的搜索路径 sys.path.append(root_folder) # 现在可以直接导入CONFIG了 import CONFIG
之后你不管是直接运行子包文件,还是从main.py调用,都能正常使用CONFIG里的配置。
方案2:用VS Code的模块方式运行(规范的包运行方式)
如果你想保持相对导入的写法(比如from .. import CONFIG),可以按以下步骤操作:
- 打开VS Code,把你的项目根目录拖进窗口(设为工作区)
- 打开VS Code的终端(菜单栏→终端→新建终端),确保终端的当前路径是项目根目录(如果不是,输入
cd ..回车,直到路径显示为你的项目根目录) - 要运行子包文件时,输入命令:
(python -m motors.one_kind_of_motormotors是子包名,one_kind_of_motor是文件名,不要加.py后缀)
这样Python会把motors当成项目包的一部分,相对导入就能正常工作了。
方案3:统一从main.py启动(推荐的项目运行方式)
尽量不要单独运行子包文件,而是通过根目录的main.py来调用所有子包功能。因为main.py在根目录,导入CONFIG没问题,然后main.py再导入子包的模块(比如from motors import one_kind_of_motor),子包里的代码就能直接使用CONFIG了(不需要额外导入,或者在子包里直接import CONFIG也能生效)。
额外提示
- 根目录的
__init__.py可以删掉,Python 3.3+之后不需要这个文件也能识别包结构,留着也不影响,但不是必须的。 - 不要把
config.ini和CONFIG.py放到子包里,保持在根目录统一管理就好。
内容的提问来源于stack exchange,提问作者Omnistic
相关产品推荐
相关产品推荐

