Python相对导入失败:测试文件如何正确导入项目模块?
解决Python相对导入报错问题
问题分析
你遇到的"attempted relative import with no known parent package"错误,核心原因是直接运行tests_package1.py时,它被Python视为独立的顶层脚本,而非project包的一部分,相对导入机制无法识别其父包。另外你的代码里存在拼写错误:packe1应改为package1,这也是导入失败的诱因之一。
可行解决方案
方案1:修改sys.path,使用绝对导入
在tests_package1.py最开头添加代码,将项目根目录加入Python的模块搜索路径,之后直接用绝对导入:
import sys import os # 将项目根目录(project文件夹)添加到sys.path sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) # 执行绝对导入 from package1.some import some
之后直接运行tests_package1.py即可,无需额外创建__init__.py(创建空文件也不影响)。
方案2:使用-m参数以模块方式运行
- 在
package1和tests目录下各创建一个空的__init__.py文件,让Python识别它们为子包; - 修正导入语句的拼写错误:
from ..package1.some import some
- 打开终端切换到
project目录,执行以下命令运行测试脚本:
python -m tests.tests_package1
这种方式会把project当作顶层包,相对导入可正常工作。
方案3:将项目安装为可编辑模式
适合长期维护的项目,能彻底解决导入问题:
- 在
project目录下创建pyproject.toml文件,内容如下:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your-project-name" version = "0.1.0"
- 在终端进入
project目录,执行命令:
pip install -e .
- 之后在
tests_package1.py里直接用绝对导入,无论在哪里运行脚本都能生效:
from package1.some import some
内容的提问来源于stack exchange,提问作者user3732793
相关产品推荐
相关产品推荐

