目录

VSCode切换Python2和Python3

VSCode切换Python2和Python3

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

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

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

https://i-blog.csdnimg.cn/blog_migrate/6ea11941d9614c9d456bd8f0bd8dcb46.png

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

https://i-blog.csdnimg.cn/blog_migrate/ee72c7192d6553ac3d805c88c38dcd76.png

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

https://i-blog.csdnimg.cn/blog_migrate/9a1020358c80b0a82f7dde2f106d78f6.png

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

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

https://i-blog.csdnimg.cn/blog_migrate/e3456596458be0d09d73e10f69f45ccd.png

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

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

https://i-blog.csdnimg.cn/blog_migrate/8252d36c10af68efed5984c0452109e4.png

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

https://i-blog.csdnimg.cn/blog_migrate/cd118620766d6f9acd6752d8e6a166de.png

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

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

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

参考 Code Runner 在Github上的issue:

用户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 时是不带双引号的,而我又是把Python2和Python3的可执行文件放在有空格的目录下,导致:

https://i-blog.csdnimg.cn/blog_migrate/f002442ae8ef9292dba3faeac6e737ee.png

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

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

https://i-blog.csdnimg.cn/blog_migrate/4a5e28a67eeb19d88a402e56a57acd77.png

最终效果为:

  • 执行Python2代码:

    https://i-blog.csdnimg.cn/blog_migrate/780f4d995c38e0d4345662dd2cd0af71.png

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

    https://i-blog.csdnimg.cn/blog_migrate/ebd15c1e4d0873008bd485028d25c9db.png

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