原文链接:http://www.juzicode.com/python-note-multi-version-python
老规矩先抛问题:
一台电脑上安装有多个Python版本、多套虚拟环境,如何在命令行快速启动对应的版本?
这里结论也先给出来,方便不想看水文的同学:
可以编写多个对应版本的批处理文件,在批处理文件中设置path变量,将对应版本的路径添加到path路径的最前面,这样要运行哪个版本或虚拟环境打开对应的批处理文件即可:
问题和结论讲完了,接下来聊下为什么可以这么做,下面的描述以运行Python解释器为例,同样适用运行pip安装第三方包。
在命令行输入“Python”时,命令行会去系统中查找名称为Python的可执行文件,通过计算机基础–Windows PATH变量、命令行、搜索路径中的描述,实际上会按照如下的优先级顺序查找Python可执行文件:
如果当前工作目录没有找到,则会到系统PATH变量和用户PATH变量中从前往后查找,这也是我们在安装Python的时候一般要求勾选“Add Python3.x to PATH”的原因。
但是当安装多个Python版本时,虽然所有的Python安装路径都添加到了PATH变量中,但是PATH变量的路径查找也有优先级:从前向后搜索。比如桔子菌的电脑里装了如下多种Python版本以及虚拟环境:
PATH变量的组织形式如下图所示:
在命令行输入“Python”时,系统会在PATH变量表示的路径中从前往后搜索Python可执行程序,在最前面的D:\Python\Python310下找到了Python可执行文件,所以执行的总是PATH变量中路径处于最前面的Python3.10,在这种情况下想要直接调用其他版本的Python是做不到的:
如果想在命令行里输入“python”直接调用Python3.8版本,可以通过修改PATH中路径的排序,将Python3.8的路径移动到所有其他Python版本路径的前面就行,但是这种方法在更换Python版本时,需要每次进入系统变量界面修改并且重启命令行。
当然如果要调用其他版本的Python,也可以切换到相应的安装目录下再运行Python,比如要调用3.8版本,就可以切换到3.8版本的安装目录下再运行“python”:
或者将Python的完整路径输入后再运行:
前面这3种方法虽然能达到目的,但是稍显繁琐,每次都要切换路径或者输入完整路径,有没有更简便的方法呢?
答案是有的,请继续往下看……
仍然是从PATH变量入手,既然为了调用对应的Python,PATH变量每次都要修改,那是不是可以在每次启动Python前设置一次PATH变量,将需要调用的Python路径设置在PATH路径的最前面呢?答案是可行的:
从这里可以看到,直接调用python时,运行的是PATH路径中最前面的3.10,但是经过使用set命令将3.8版本的安装路径添加到PATH变量的最前面时,再次调用python,运行的就是3.8版本了。
这种方法修改PATH变量是临时的,不会真正地修改系统变量配置界面里的值,它不会影响到这台电脑上其他程序的运行,但是缺点是每次要调用其他Python版本时仍然要敲一次set命令才能生效。
每次输入set命令添加路径太过麻烦,可以将set命令放在一个批处理文件中,一个Python版本对应一个批处理文件,这样就可以免去输入set命令的麻烦,下面这个例子第1行set命令添加3.8版本python安装目录到PATH变量,第2行wt命令启动WindowsTerminal:
set path=D:\Python\Python38\Scripts;D:\Python\Python38;%path%
wt
如果没有安装wt,第2行也可以改成cmd启动系统自带的命令行:
set path=D:\Python\Python38\Scripts;D:\Python\Python38;%path%
cmd
这样对应不同的Python版本和虚拟环境,就可以有多个批处理文件,比如要启动3.8版本的Python,双击3.8版本对应批处理文件,然后在弹出的命令行下运行“python”,可以看到启动的是3.8版本:
-------分割线表示正文结束了--------
梦想是要有的,万一实现了呢
推荐阅读:
tesseract训练字体居然还有这种骚操作
新鲜上架的Python3.10,来个match-case尝尝鲜
你别耍我,0.1+0.2居然不等于0.3?
如何实现一个“万能”的调试打印函数
有了这款神器,什么吃灰文件都统统现形
一行代码深度定制你的专属二维码(amzqr)
桔子菌和超市老板田大爷的一次角色互换经历
来看看怎么用OpenCV解构Twitter大牛的视觉错觉图