VSCode切换使用Python2和Python3

  • 起因
  • 解决


起因

其实VSCode很早之前就安装了,但是一直没用它,现在才用,所以导致现在不记得自己安装过什么插件、修改过什么配置…

点击左侧的扩展,可以看到我安装过Code Runner这个插件,也正是因为此,我能直接在目录下新建一个临时的 temp.py 文件,并且用VSCode打开,编写完代码后按下快捷键Ctrl+Alt+N,快速运行代码;这对运行一些零散的Python脚本而言十分便捷

但是今天发现编写了一些Python2的代码,点击左下角的切换到Python2的解释器,却发现无法运行:

visual studo更换项目python环境 vscode切换python版本_Code

VSCode的设置中搜索 python.pythonpath,发现Python2的路径没有问题:

visual studo更换项目python环境 vscode切换python版本_python_02

解决

原因在于我的电脑中同时安装了Python2和Python3,如果只有一个版本的Python,那么在终端进入Python窗口时,只需键入 python;但同时有了Python2和Python3,那么我就前往Python2的安装目录下,把Python2的可执行文件 python.exepythonw.exe 重命名为 python2.exepythonw2.exe

visual studo更换项目python环境 vscode切换python版本_Python_03

所以在cmd中,如果想使用Python2,就键入 python2;如果想使用Python3,键入默认的 python 即可

留意到下图中的这里(红框处):

visual studo更换项目python环境 vscode切换python版本_Python_04

检查发现,无论是Python2还是Python3,[Running] 后面的指令都是 python -u;这就相当于我们在cmd始终执行的是 python -u xxx.py 指令,虽然我们Python2的路径是正确的,但始终没有用到

原来是之前安装的Code Runner的锅,我们打开VSCode的设置,搜索 code-runner.executormap,可以看到:

visual studo更换项目python环境 vscode切换python版本_Code_05

Code Runner根据你运行的代码类型,会自动添加指令,这就相当于你在cmd下执行了指令 python -u xxx.py;我们尝试把黄色框中的 "python -u" 改成 "python2 -u",这样Python2的代码就能成功运行了

visual studo更换项目python环境 vscode切换python版本_python_06

但是Python3代码反而不能运行了

它坑就坑在不会对Python2和Python3进行区分,如果我们点击左下角切换解释器,会发现上图中的 python.pythonPath 会发生改变,但 code-runner.executorMap 则不会,也就是说Python2和Python3共用一个 code-runner.executorMap

这就导致了想快捷键直接运行Python代码,必须看你设置的是 python -u 还是 python2 -u

用户dhdavvie给出了一个解决方案:

"code-runner.executorMap": {
        "python": "$pythonPath $fullFileName",
    },
    "code-runner.runInTerminal": true

在运行Python代码时,它不再直接执行 python -u xxx.pypython2 -u xxx.py,而是把两个参数的值作为指令:第一个参数是Python解释器的路径 $pythonPath、第二个是待执行的文件 $fullFileName;这样就相当于直接用Python的可执行文件执行 .py

这里有点小问题,VSCode在输出 $pythonPath

visual studo更换项目python环境 vscode切换python版本_python_07

由于路径中有 Program Files,它直接在空格那截断了

解决它的方法就是人为添加上双引号,最终我的 code-runner.executorMap

visual studo更换项目python环境 vscode切换python版本_Code_08

最终效果为:

  • 执行Python2代码:
  • 点击左下角切换到Python3,直接运行:

这样只用切换左下角的解释器,就能快速运行Python2和Python3的代码了