最近安装了 vscode 想要学习一下怎么用它来编写 Python ,结果今天遇到问题了。在 virtualenv 环境中启动vscode 却没办法正常调试。
基本环境
系统: manjaro Linux 17.0.2
python: python 3.6.2
vscode: 1.16.0
--扩展: donjayamanne.python 0.7.0
症状描述
使用终端进入虚拟环境后启动vscode 或 设置中指定解释器位置"python.pythonPath": "虚拟目录/bin/python"
。任意一种方式启动vscode(最后的症状都一样)。
点击 F5 之后虽然调试用的工具条会出现,但是代码却被直接执行了,和直接运行代码的效果一样,而工具条除了停止以外,其他功能都没反应。
求解决办法,还是说都这样?这不科学啊!
配置文件包括:
# setting.json
{
"files.autoSave": "afterDelay",
"python.pythonPath": "~/pyStudy/venv/bin/python",
}
# launch.json 这个应该是自动生成的没动过
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "PySpark",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"osx": {
"pythonPath": "${env:SPARK_HOME}/bin/spark-submit"
},
"windows": {
"pythonPath": "${env:SPARK_HOME}/bin/spark-submit.cmd"
},
"linux": {
"pythonPath": "${env:SPARK_HOME}/bin/spark-submit"
},
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "Python Module",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"module": "module.name",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "Integrated Terminal/Console",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "",
"console": "integratedTerminal",
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit"
]
},
{
"name": "External Terminal/Console",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "",
"console": "externalTerminal",
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit"
]
},
{
"name": "Django",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "${workspaceRoot}/manage.py",
"cwd": "${workspaceRoot}",
"args": [
"runserver",
"--noreload",
"--nothreading"
],
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput",
"DjangoDebugging"
]
},
{
"name": "Flask",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "fully qualified path fo 'flask' executable. Generally located along with python interpreter",
"cwd": "${workspaceRoot}",
"env": {
"FLASK_APP": "${workspaceRoot}/quickstart/app.py"
},
"args": [
"run",
"--no-debugger",
"--no-reload"
],
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "Flask (old)",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "${workspaceRoot}/run.py",
"cwd": "${workspaceRoot}",
"args": [],
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "Pyramid",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"args": [
"${workspaceRoot}/development.ini"
],
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput",
"Pyramid"
]
},
{
"name": "Watson",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "${workspaceRoot}/console.py",
"cwd": "${workspaceRoot}",
"args": [
"dev",
"runserver",
"--noreload=True"
],
"env": {},
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "Attach (Remote Debug)",
"type": "python",
"request": "attach",
"localRoot": "${workspaceRoot}",
"remoteRoot": "${workspaceRoot}",
"port": 3000,
"secret": "my_secret",
"host": "localhost"
}
]
}
更新描述(2017年09月10日)
问题还没有解决,但是感谢 @laxtiz 首先提供的帮助,按照提示。我做了如下操作和尝试,并且发现了一个有趣的事情:
- 回复了VScode默认的设置,删除“用户设置”中 Python 的路径。
- 在正常环境而非虚拟环境中启动 VScode
- 重新创建了两个虚拟环境:
venv —— 使用Python3 自带的 pyvenv 工具创建:python -m venv venv
test —— 使用传统的 virtualenv 工具创建:virtualenv test
本来是想测试是否是创建工具的问题,结果发现了好玩。 - 重新设置 VScode 但是使用的是“工作区设置”
"python.pythonPath": "/home/gos/pyStudy/venv/bin/python"
经过测试发现 VScode 和Python扩展donjayamanne.python 可以正确的识别虚拟环境,并且自动使用pip为虚拟环境安装了 pylint
但是按下F5调试功能后仍然是直接跑代码(之前没有说,这个过程感觉比直接运行脚本要慢)
好玩的是,当我交换两个虚拟环境的Python路径时却可以正常使用调试功能,当然了Python的库也是对方环境中的库
问题已终结
问题以及终结,当时应当是 python 插件的问题,我曾在提问之后在插件作者的 github 中看到同样问题的反馈,目前已经修复了问题。
感谢 @laxtiz @kalotswedish 的热心解答
如还有人与到类似问题请两位的回答
提示一:不要在code外部加载virtualenv环境
提示二:不要在用户设置中指定python路径
需要在code中使用virtualenv,请在当前工作目录下
.vscode/settings.json
中指定python.pythonPath
或通过命令面板
Python: Select Workspace Interpreter
选择。另外,确保你的虚拟环境完整
可尝试新建文件夹,并新建虚拟环境,分别使用系统python 以及新的虚拟环境启动debug 试试
工作区是指你的项目所在目录,项目在哪你用那个文件夹
虚拟环境的位置无关紧要,只要vscode 能找到就行
补个图