Git子模块中Python相对导入问题:规避“无已知父包”报错
解决Python包作为Git子模块的导入冲突问题
方案1:使用基于包名的绝对导入(推荐)
把module_a.py里的导入语句修改为:
from my_package.module_b import my_utility_function
这种写法能同时适配两种场景:
- 在
my_program中引用时,Python能通过my_package的层级正确找到模块; - 独立开发测试
my_package时,只需确保Python能识别到my_package作为顶级包:- 切换到
my_package的上级目录(即包含my_package的文件夹)运行测试; - 用
python -m pytest tests/命令执行测试,-m参数会自动将当前目录加入模块搜索路径,让Python正确识别my_package结构。
- 切换到
方案2:将my_package安装为可编辑包
在my_package目录下执行以下命令:
pip install -e .
这会把my_package以“可编辑模式”安装到Python的site-packages中,实际代码仍指向本地文件(修改后立即生效)。之后无论你是独立开发测试,还是在my_program中引用,都可以直接使用基于my_package的绝对导入,完全不需要依赖相对导入或手动修改路径。
方案3:临时调整测试文件的路径(应急方案)
如果不想修改包内的导入逻辑,可以在测试文件开头添加代码,手动将my_package的路径加入Python搜索路径:
import sys from pathlib import Path # 将my_package所在目录加入sys.path sys.path.append(str(Path(__file__).parent.parent)) from my_package.module_a import my_function
这种方法虽然不够优雅,但能快速解决独立测试时的导入错误。
内容的提问来源于stack exchange,提问作者Rustle Branch
相关产品推荐
相关产品推荐

