Python测试目录导入父目录子文件夹类失败的解决求助
解决测试文件移至子文件夹后无法导入lib模块的问题
问题原因
在tests目录下执行python -m unittest时,Python的模块搜索路径(sys.path)不包含项目根目录,因此找不到lib模块。
可行解决方案
1. 从项目根目录运行测试
不要在tests目录下执行命令,切换到项目根目录(project文件夹),执行以下任意命令:
- 运行指定测试文件:
python -m unittest tests/test_myclass.py - 自动发现并运行所有测试:
python -m unittest discover tests
这样项目根目录会被加入sys.path,lib模块就能被正常识别。
2. 调整测试文件的导入路径(解决VSCode格式化问题)
在测试文件最顶部添加路径代码,并通过# noqa注释阻止VSCode自动格式化调整顺序:
import sys import os # 将项目根目录添加到模块搜索路径,# noqa 告诉格式化工具不要移动此行 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # noqa from lib.myclass import Myclass
或者写成一行,避免被格式化拆分:
import sys, os; sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from lib.myclass import Myclass
3. 将项目转为可安装包(推荐长期方案)
在项目根目录创建setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="myproject", version="0.1", packages=find_packages(exclude=["tests"]), )
然后在项目根目录执行:pip install -e .
这会以开发模式安装项目,之后lib模块会被Python全局识别,无论在哪个目录运行测试都能正常导入。
内容的提问来源于stack exchange,提问作者ArieAI
相关产品推荐
相关产品推荐

