添加src/__init__.py后VSCode中PyTest测试收集失败求助
解决VSCode中PyTest导入路径错误问题
问题情况
你的目录结构:
conftest.py(空文件)src__init__.py(包含从main.py导入的important_function)main.py
test__init__.py(空文件)test_main.py
添加src/__init__.py后,PyTest运行报错:
ImportError: cannot import name 'important_function' from '__init__' (/Users/ynusinovich/.vscode/extensions/ms-python.python-2022.20.1/pythonFiles/testing_tools/__init__.py)
核心问题是Python优先找到了VSCode扩展目录下的__init__.py,而非你项目src目录里的文件。
解决方法
1. 修正导入语句
不要直接写from __init__ import important_function,改成从src模块明确导入:
from src import important_function
如果important_function实际定义在main.py里,更精准的写法是:
from src.main import important_function
2. 配置项目Python路径
在项目根目录创建.env文件,添加以下内容:
PYTHONPATH=${PYTHONPATH}:./
这会把项目根目录加入Python模块搜索路径,让系统优先加载你项目内的src模块。
3. 配置VSCode工作区设置
打开项目的.vscode/settings.json,添加以下配置:
{ "python.analysis.extraPaths": ["./src"], "python.testing.pytestArgs": ["."] }
python.analysis.extraPaths让VSCode的代码分析工具识别src目录,pytestArgs指定从项目根目录启动测试。
4. 修改conftest.py
在项目根目录的conftest.py中添加路径配置:
import sys from pathlib import Path # 将src目录加入Python搜索路径 sys.path.append(str(Path(__file__).parent / "src"))
这样pytest启动时会自动把src目录加入路径,确保能找到你的自定义模块。
内容的提问来源于stack exchange,提问作者ynusinovich
相关产品推荐
相关产品推荐

