在Visual Studio Code中配置含独立源码与测试目录的Python项目,以支持IntelliSense、运行及测试全功能
在Visual Studio Code中配置含独立源码与测试目录的Python项目,以支持IntelliSense、运行及测试全功能
我之前也碰到过和你一模一样的项目结构问题,按照下面的步骤配置,就能让VS Code完美识别src作为源码根目录,同时搞定IntelliSense、代码运行和测试发现/运行的问题:
首先先明确下你的项目结构(方便后续对照):
project/ ├── src/ │ └── my_package/ │ ├── __init__.py │ └── code_file.py └── tests/ ├── __init__.py └── my_package/ ├── __init__.py └── code_file_test.py
1. 配置IntelliSense识别源码根
要让VS Code的IntelliSense正确找到src下的模块,需要修改工作区的设置:
- 按下
Ctrl+,打开设置面板,点击右上角的**打开设置(JSON)**按钮,进入工作区配置文件 - 添加以下配置:
{ "python.analysis.extraPaths": [ "${workspaceFolder}/src" ], // 如果使用虚拟环境,替换成你的虚拟环境Python路径 "python.pythonPath": "${workspaceFolder}/.venv/bin/python" }
这个配置会告诉VS Code的Python分析器,把src目录加入到模块搜索路径中,这样不管是在src里写代码,还是在tests里导入my_package的模块,IntelliSense都能正常提示,不会出现红色波浪线报错。
2. 配置代码运行环境
直接运行代码时,需要让Python解释器能找到src下的模块,我们可以通过配置launch.json来实现:
- 点击左侧的运行和调试图标(或按下
Ctrl+Shift+D),点击创建launch.json文件,选择Python环境 - 将配置修改为:
{ "version": "0.2.0", "configurations": [ { "name": "Python: 运行当前脚本", "type": "python", "request": "launch", "program": "${file}", "cwd": "${workspaceFolder}", "env": {"PYTHONPATH": "${workspaceFolder}/src"}, "console": "integratedTerminal" }, { "name": "Python: 运行当前测试", "type": "python", "request": "launch", "program": "${file}", "cwd": "${workspaceFolder}", "env": {"PYTHONPATH": "${workspaceFolder}/src"}, "console": "integratedTerminal" } ] }
这里通过env设置了PYTHONPATH环境变量,把src目录加入进去,这样运行代码或测试时,Python解释器就能正确导入my_package模块了。
3. 配置测试发现与运行
以常用的pytest为例,配置VS Code自动发现并运行tests目录下的测试:
- 点击左侧的测试图标(或按下
Ctrl+Shift+T),选择pytest作为测试框架 - 当VS Code提示输入测试路径时,输入
tests即可 - 也可以在工作区设置里补充以下配置,确保测试运行正常:
{ "python.testing.pytestArgs": [ "tests" ], "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true, "python.testing.cwd": "${workspaceFolder}", "python.testing.env": {"PYTHONPATH": "${workspaceFolder}/src"} }
这个配置会告诉VS Code用pytest来运行测试,并且指定测试目录为tests,同时设置PYTHONPATH让测试代码能导入src里的模块。
最后几个小提示
- 如果你用了虚拟环境,一定要确认VS Code左下角状态栏显示的是你的项目虚拟环境,不然配置可能不生效
- 配置完成后,建议按下
Ctrl+Shift+P,选择重新加载窗口,让所有配置生效 - 如果还是有问题,可以检查一下
__init__.py文件是否都正确放置(你的项目结构里已经有了,这点没问题)
备注:内容来源于stack exchange,提问作者Danny Varod
相关产品推荐
相关产品推荐

