用pyenv和venv进行python版本及依赖管理
- IT
- 2024-12-01
- 30热度
- 0评论
当尝试多个python项目时,python的版本管理成为一个难题:一方面,不同的项目可能支持的python版本不同;另一方面,不同项目(甚至同一个项目的不同版本)对某个依赖库的版本要求不同。如果都将依赖一股脑装到全局环境中,经常会发生冲突。
实践证明,python版本以及依赖库的版本绝非越高越好。有一些旧的库会被抛弃(甚至标准库),如果换成新的库,则需要对代码进行大量修改,进一步增加了其不兼容性。
所以最好的方案是能在系统中安装多个python版本,彼此互不干扰。pyenv就是这样一种工具。以下均以windows为例。
1、安装pyenv
pyenv的项目地址:https://github.com/pyenv-win/pyenv-win
安装它,可以使用powershell,执行以下命令:
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
2、安装多个版本的python
在powershell中,首先设置代理环境(看破不说破):
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
用install -l命令查看所有支持的版本列表:
pyenv install -l
然后即可安装想要的版本:
pyenv install 3.11.0
pyenv install 3.12.0
pyenv install 3.8.0
目前python已经更新到了3.13.0,但兼容它的项目还不多,比如torch就还不支持3.13.0,所以装到3.12.0已经够新了。
3、设置项目文件夹的python环境版本
首先cmd导航到项目文件夹,然后执行local命令:
pyenv local 3.11.0
这会在该目录下生成一个.python-version文件,里面写着你设定的版本号。今后在该目录下执行python命令,就会自动应用设定的版本环境。
4、结合虚拟环境为不同的项目单独安装依赖
仅仅区分版本还是不够的,在使用同一个python版本的不同项目中,依赖仍然可能冲突。最保险的方法是各装各的依赖。所以需要用到python自带的虚拟环境功能。
在项目文件夹中执行venv命令:
python -m venv myvenv
它会将你用pyenv指定的python版本的环境复制一份,放到当前文件夹的myvenv目录。
之后,务必记得需要激活虚拟环境,在命令行中执行:
.\myvenv\scripts\activate
之后提示符前面会带上(myvenv),表明当前已经处于虚拟环境。这时候使用pip install安装的所有依赖,都会保存到myvenv文件夹,这就与其他项目彻底分开了。
当要退出当前虚拟环境时,直接执行:
deactivate
5、设置全局python版本
其实每个项目都单独设置之后,全局的版本是什么已经不重要了。设置它的方式:
pyenv global 3.12.0
这样全局环境下执行python就是3.12.0版本。
查看pyenv支持的所有命令:
pyenv commands
6、批处理调用虚拟环境
由于虚拟环境在激活时,默认会重置一下命令行窗口,所以直接把.\myvenv\scripts\activate放到bat文件中是不行的。解决的方式是加一个call,并且去掉前面那个表示当前目录的点:
call myvenv\scripts\activate
如此,pyenv和venv结合,就可以完全掌控python的多版本,并隔离不同项目的依赖了。