跳转至

🤠 uv

uv是Astral团队用Rust开发的一个Python包解析与安装器。

它被设计为 pippip-tools 的直接替代品,不使用缓存时比它们快 8-10 倍。也可通过 uv venv 用作虚拟环境管理器,比 python -m venv 快 80 倍,比virtualenv 快 7 倍。1

使用pip安装:

pip install uv

其他安装方式见官方博客

壹丨 简单使用

1. 安装依赖包

numpy为例:

# 使用pip
pip install numpy

# 使用uv
uv pip install numpy

2. 生成requirements.txt

第一步,安装pip-tools

uv pip install pip-tools

第二步,创建requirements.in,如:

requirements.in
mkdocs-material
mkdocs-glightbox
neoteroi-mkdocs
mkdocs-jupyter
mistune
fonttools

第三步,生成requirements.txt

uv pip compile requirements.in -o requirements.txt
输出
Resolved 85 packages in 24ms
# This file was autogenerated by uv via the following command:
#    uv pip compile requirements.in -o requirements.txt
anyio==4.3.0
    # via httpx
asttokens==2.4.1
    # via stack-data
attrs==23.2.0
    # via
    #   jsonschema
    #   referencing
babel==2.14.0
    # via mkdocs-material
beautifulsoup4==4.12.3
    # via nbconvert
bleach==6.1.0
    # via nbconvert
certifi==2024.2.2
    # via
    #   httpcore
    #   httpx
    #   requests
charset-normalizer==3.3.2
    # via requests
click==8.1.7
    # via
    #   mkdocs
    #   neoteroi-mkdocs
colorama==0.4.6
    # via
    #   click
    #   ipython
    #   mkdocs
    #   mkdocs-material
comm==0.2.1
    # via ipykernel
debugpy==1.8.1
    # via ipykernel
decorator==5.1.1
    # via ipython
defusedxml==0.7.1
    # via nbconvert
essentials==1.1.5
    # via essentials-openapi
essentials-openapi==1.0.9
    # via neoteroi-mkdocs
executing==2.0.1
    # via stack-data
fastjsonschema==2.19.1
    # via nbformat
fonttools==4.49.0
ghp-import==2.1.0
    # via mkdocs
h11==0.14.0
    # via httpcore
httpcore==1.0.4
    # via httpx
httpx==0.27.0
    # via neoteroi-mkdocs
idna==3.6
    # via
    #   anyio
    #   httpx
    #   requests
ipykernel==6.29.3
    # via mkdocs-jupyter
ipython==8.22.1
    # via ipykernel
jedi==0.19.1
    # via ipython
jinja2==3.1.3
    # via
    #   mkdocs
    #   mkdocs-material
    #   nbconvert
    #   neoteroi-mkdocs
jsonschema==4.21.1
    # via nbformat
jsonschema-specifications==2023.12.1
    # via jsonschema
jupyter-client==8.6.0
    # via
    #   ipykernel
    #   nbclient
jupyter-core==5.7.1
    # via
    #   ipykernel
    #   jupyter-client
    #   nbclient
    #   nbconvert
    #   nbformat
jupyterlab-pygments==0.3.0
    # via nbconvert
jupytext==1.16.1
    # via mkdocs-jupyter
markdown==3.5.2
    # via
    #   mkdocs
    #   mkdocs-material
    #   pymdown-extensions
markdown-it-py==3.0.0
    # via
    #   jupytext
    #   mdit-py-plugins
    #   rich
markupsafe==2.1.5
    # via
    #   essentials-openapi
    #   jinja2
    #   mkdocs
    #   nbconvert
matplotlib-inline==0.1.6
    # via
    #   ipykernel
    #   ipython
mdit-py-plugins==0.4.0
    # via jupytext
mdurl==0.1.2
    # via markdown-it-py
mergedeep==1.3.4
    # via mkdocs
mistune==3.0.2
    # via nbconvert
mkdocs==1.5.3
    # via
    #   mkdocs-jupyter
    #   mkdocs-material
    #   neoteroi-mkdocs
mkdocs-glightbox==0.3.7
mkdocs-jupyter==0.24.6
mkdocs-material==9.5.12
    # via mkdocs-jupyter
mkdocs-material-extensions==1.3.1
    # via mkdocs-material
nbclient==0.9.0
    # via nbconvert
nbconvert==7.16.1
    # via mkdocs-jupyter
nbformat==5.9.2
    # via
    #   jupytext
    #   nbclient
    #   nbconvert
neoteroi-mkdocs==1.0.5
nest-asyncio==1.6.0
    # via ipykernel
packaging==23.2
    # via
    #   ipykernel
    #   jupytext
    #   mkdocs
    #   nbconvert
paginate==0.5.6
    # via mkdocs-material
pandocfilters==1.5.1
    # via nbconvert
parso==0.8.3
    # via jedi
pathspec==0.12.1
    # via mkdocs
platformdirs==4.2.0
    # via
    #   jupyter-core
    #   mkdocs
prompt-toolkit==3.0.43
    # via ipython
psutil==5.9.8
    # via ipykernel
pure-eval==0.2.2
    # via stack-data
pygments==2.17.2
    # via
    #   ipython
    #   mkdocs-jupyter
    #   mkdocs-material
    #   nbconvert
    #   rich
pymdown-extensions==10.7
    # via mkdocs-material
python-dateutil==2.9.0.post0
    # via
    #   ghp-import
    #   jupyter-client
pywin32==306
    # via jupyter-core
pyyaml==6.0.1
    # via
    #   essentials-openapi
    #   jupytext
    #   mkdocs
    #   pymdown-extensions
    #   pyyaml-env-tag
pyyaml-env-tag==0.1
    # via mkdocs
pyzmq==25.1.2
    # via
    #   ipykernel
    #   jupyter-client
referencing==0.33.0
    # via
    #   jsonschema
    #   jsonschema-specifications
regex==2023.12.25
    # via mkdocs-material
requests==2.31.0
    # via mkdocs-material
rich==13.7.1
    # via neoteroi-mkdocs
rpds-py==0.18.0
    # via
    #   jsonschema
    #   referencing
six==1.16.0
    # via
    #   asttokens
    #   bleach
    #   python-dateutil
sniffio==1.3.1
    # via
    #   anyio
    #   httpx
soupsieve==2.5
    # via beautifulsoup4
stack-data==0.6.3
    # via ipython
tinycss2==1.2.1
    # via nbconvert
toml==0.10.2
    # via jupytext
tornado==6.4
    # via
    #   ipykernel
    #   jupyter-client
traitlets==5.14.1
    # via
    #   comm
    #   ipykernel
    #   ipython
    #   jupyter-client
    #   jupyter-core
    #   matplotlib-inline
    #   nbclient
    #   nbconvert
    #   nbformat
urllib3==2.2.1
    # via requests
watchdog==4.0.0
    # via mkdocs
wcwidth==0.2.13
    # via prompt-toolkit
webencodings==0.5.1
    # via
    #   bleach
    #   tinycss2

或使用pyproject.toml生成依赖文件:

uv pip compile pyproject.toml -o requirements.txt

同步已经锁定的依赖:

uv pip sync requirements.txt

贰丨问题

  1. 依赖包安装使用默认源,pip的源配置对uv不适用。这个原因导致我必须挂代理才能使用

  1. astral.sh,@charliermarsh,uv: Python packaging in Rust