Python: Python 多版本管理

Python Launcher
Python Launcher是Python for Windows才有的功能. (注一)

Python Launcher 的出现, 让我们可以不必依赖环境变数PATH 的设定来简化python 执行档的使用, 同时也简化了多个版本的python 同时存在时的管理工作. (试想如果你的系统里安装3 或4个python 时, 你到底要如何指定使用其中一个版本?)
Python: Python 多版本管理_第1张图片
Python Launcher py.exe是自Python 3.3版起,随附在Python for Windows的一个工具程式.

它会被安装到windows目录中,因此使用它不必修改环境变数PATH (注二) .
它是一个python的多版本启动管理程式.所以它和python本身的版本无关(可以启动任何版本的Python),同时在虚拟环境启动的状态下,还认得启动的那个虚拟环境.
使用时,只要直接将原本指令中的python改成py或者附加版号的py -3.8即可.
注一: github上也有人写了给Linux用的bash script py ,用法和windows的py.exe几乎一致,需要的就自行取用.

注二:如果你连第一个安装的python也没有把它的路径加到环境变数PATH里,同时又没有使用python venv (或其他类似的)虚拟环境,会出现找不到pip指令的状况.请不必大惊小怪,只要用py -m pip替代pip就可以了.而且进到python venv虚拟环境中, pip指令就会可以使用了,其实影响真的不大.如果真的没有pip用不习惯,建议环境变数PATH里还是加上你最常用的那一版,也方便其他需要python.exe的程式或者批次档的呼叫.其他的版本安装时就可以不必加了.

使用方法
列出可用版本: py -0 (注三)
没有启动虚拟环境时:

D:\Works\jupyter>py -0
Installed Pythons found by py Launcher for Windows
 -3.9-64 *
 -3.8-64

启动了虚拟环境:

(myEnv) D:\Works\jupyter>py -0
Installed Pythons found by py Launcher for Windows
 (venv) *
 -3.9-64
 -3.8-64

所以,不管是否启动了venv虚拟环境,你都可以放心大胆的直接用py来取代指令中的python .

指定使用特定版本:
可以指定大版本号即可:例如:
py -2 test.py即是使用python 2版(系统有多个2版时,则预设使用最新的2版)执行test.py ;
py -3 test. py则是使用python 3版(系统有多个3版时,则预设使用最新的3版)执行test.py .
可以指定大版本号加次版号: 例如, python 同时有3.5 和3.8 版存在:
py -3.5 test.py是用3.5版执行;
py -3.8 test.py则是改用3.8版执行.
注意:它只管到次版号这一层,我们无法指定再细的版号,例如: 3.8.2和3.8.6是无法指定的.
可以配合.py 档档头的hashbang (#!), 或者强制指定python 版本(覆盖hashbang 设定)
例如: 以下三个测试档案

test1.py

import sys
print(sys.version)

test2.py

#! python2
 
import sys
print(sys.version)

test3.py

#! python3
 
import sys
print(sys.version)

则以下指令结果如其后的注解

py test1.py        # 預設使用 python 最新版本
py test2.py        # 使用 #! 指定 python 版本
py test3.py        # 使用 #! 指定 python 版本
 
py -3.7 test1.py   # 強制使用 python 3.7 版
py -3.8 test2.py   # 強制使用 python 3.8 版, (檔頭的 hashbang 无效)
py -2   test3.py   # 強制使用最新的 python2, (檔頭的 hashbang 无效)

找不到指定版本时,会提示系统内没有安装该版本,例如:
Requested Python version (2) is not installed
注三: py.exe只认得经由python安装程式安装的python.exe .

py.exe如何决定用哪一个版本的python.exe ?
先确定应该用哪一个版本:
如果使用py.exe指令时有指定用哪一个版本,则直接在找寻指定的版本.如果没有指定版本,则py.exe会先检查py.ini来看看是否有预设指定使用哪一个版本:
依序是:

使用者家目录\AppData\Local\py.ini
%SystemRoot%\py.ini (注四)
但优先权是使用者家目录\AppData\Local\py.ini比较高(即:二者同存在时,不管各自指定的版本是大或小,都以使用者家目录\AppData\Local\py. ini里的设定为预设指定的版本).如果又没有py.ini则预设使用的版本是由下述的二个registry中找到的最高版本中的优先权较高的版本+次版号(注五,注六) .
再找寻所需要的版本
接下来py.exe会经由检查windows registry来找寻该版本的python.exe的路径:

先检查HKCU\SOFTWARE\Python\PythonCore\ . \InstallPath
再检查HKLM\SOFTWARE\Python\PythonCore\
. \InstallPath
如果HKCU (登载使用者安装的版本)里有找到需要版本的安装路径时,优先使用HKCU里找到的.找不到,再到HKLM (登载系统安装的版本)里找所需要的版本.当HKCU和HKLM里都有相同的版本+次版号时, HKCU的优先权大于HKLM (注六) .

注四: %SystemRoot%的实际位置一般是C:\Windows

注五:有点拗口.应该是没有指定版本时,如果HKCU里有找到python安装路径时,优先使用HKCU里找到的最大版本.没有时,改用HKLM里找到的最大版本.二者都有,当然以HKCU优先.有指定版本时, HKCU里有就用HKCU里的,没有再改用HKLM里的.

注六: python的版本号使用abc的格式. a是大版本号用于架构修改,即所谓的大改版; b是次版号用于增加新功能/特性时; c为修正版号用于修正错误;但是py.exe和py.ini二者都只会看到版本+次版号(即ab )而不管修正版号.故而当py.exe决定使用3.8版时,即便系统安装的版本是3.8 .6系统依然会选择使用使用者安装的3.8.3版.

检查python 的路径及版本号码
出于各种不同的原因,你可能会有许多的python执行环境(包括:安装了多个版本,并为不同专案建了不同版本的虚拟环境).因此需要知道并确定当下我们使用的python.exe是哪一个,还有版本是多少?

下列指令可以列出当前环境下你下的python指令是哪一个?

# Windows
where python
# 或者 mac OSX, Linux
which python

下列指令可以列出python的版本号码

python --version
# 或者
python -V        # 注意是大寫 V

同样的,下列指令可以列出py.exe所带出来的python版本号码

py --version
# 或者
py -V            # 注意以下都是大寫 V
# 或者
py -3 -V         # py 帶出哪一個版本的 python3
# 或者
py -3.8 -V       # py 帶出哪一個版本的 3.8

配合python venv 模组建立虚拟环境
知道py.exe如何运作之后,我们就可以很容易的建立不同版本的python虚拟环境.

D:\ProjA>py -m venv vEnv3           # 使用預設版本, 建立虛擬環境 vEnv3
D:\ProjA>vEnv3\Scripts\activate     # 進入虛擬環境 vEnv3
(vEnv3) D:\ProjA>py -m pip install -U pip   # 更新虛擬環境的 pip
# 可以為 vEnv3 安裝 python package 了
(vEnv3) D:\ProjA>pip install ...
 
# 或者
D:\ProjA>py -3.9 -m venv vEnv39     # 使用 3.9 版, 建立虛擬環境 vEnv39
D:\ProjA>vEnv39\Scripts\activate    # 進入虛擬環境 vEnv39
(vEnv39) D:\ProjA>py -m pip install -U pip   # 更新虛擬環境的 pip
# 可以為 vEnv39 安裝 python package 了
(vEnv39) D:\ProjA>pip install ...
 
# 或者
D:\ProjA>py -3.8 -m venv vEnv38     # 使用 3.8 版, 建立虛擬環境 vEnv38
D:\ProjA>vEnv38\Scripts\activate    # 進入虛擬環境 vEnv38
(vEnv38) D:\ProjA>py -m pip install -U pip   # 更新虛擬環境的 pip
# 可以為 vEnv38 安裝 python package 了
(vEnv38) D:\ProjA>pip install ...

为不同版本的python 安装package
也可以利用py.exe来为各个版本的python安装package.例如:安装jupyterlab和一些AI数据分析常用的套件.

py -3.5 -m pip install jupyterlab numpy pandas matplotlib
py -3.9 -m pip install jupyterlab numpy==1.19.3 pandas matplotlib

注意:请不要和上面的虚拟环境下用的指令搞混了.在虚拟环境里,其他不相干的python环境已经隔开了,所以我们并不需要再额外指版本.而是应该启动该虚拟环境,再直接用pip install jupyterlab numpy pandas matplotlib来安装package.

你可能感兴趣的:(python,python,大数据,pip)