用uv代替pip和venv
为什么要换
python的环境管理用过很多了,从最早的virtualenv到后来封装后的virtualenvwraper再到现在用的自带的venv,确实是越来越好用的。不过最近这个用rust写的uv似乎比较红,群里的MK和95也推荐,所以我也来试试。
安装
MK说只要pip install uv就可以了,但是在我的mint上似乎没这么简单。
首先是现在不允许直接安装系统python包了,怕破坏依赖关系,虽然可以加参数强制安装,但毕竟有风险。这种情况我通常是去apt里找一个类似:python3-uv
这样的包来装,但不幸的是mint里还没有。
只好退而用另一个替代方案:
sudo apt install pipx
pipx install uv # 官方源如果太慢,可以用-i参数使用国内镜像源
# 安装路径在$HOME/.local/bin,记得加到PATH里
使用
使用方法类似venv,只是需要前面加上uv命令。
uv venv # 在当前路径下创建.venv的虚拟环境,如果不想用.venv,可以在后面指定名字
. .venv/bin/activate # 切换到虚拟环境
uv pip install -r requirements.txt # 也可以用-i使用国内镜像源,不过uv不支持在requirements.txt里用--index指定源
安装速度真的是比pip高不知道哪里去……
需要注意的是,uv pip并不会使用默认的~/.pip/pip.conf
里的配置,而是有自己的配置文件:~/.config/uv/uv.toml
,所以如果想要指定默认镜像,还得加到这个配置文件里,比如:
# ~/.config/uv/uv.toml
index-url = "https://mirrors.aliyun.com/pypi/simple/"
虚拟环境
需要注意的是,在pip中,可以在不切换到虚拟环境的情况,直接使用类似.venv/bin/pip
命令来直接管理虚拟环境里的包。这个功能在docker构建的时候特别好用。但是uv不行,不论是否在虚拟环境里,运行的uv命令都是在~/.local/bin
下的,所以如果想在不切换到虚拟环境的情况下进行虚拟环境里的包管理则需要通过两种方式:
一种是在虚拟环境里安装一个uv,然后使用这个uv。另一种是指定使用虚拟环境里的python。
安装uv法:
. .venv/bin/activate # 切换到虚拟环境
uv pip install uv # 在虚拟环境里安装uv
deactivate # 退出虚拟环境
.venv/bin/uv pip install -r requirements.txt # 在虚拟环境里安装依赖
指定python法:
~/.local/bin/uv pip install -p .venv/bin/python -r requirements.txt # 在.venv虚拟环境里安装依赖
个人推荐后者,因为比较简洁。
其实根本问题就是uv创建虚拟环境的时候没有默认在环境里装一个uv,但pip的虚拟环境里默认是有pip的。
推送到[go4pro.org]