🤠 uv
uv是Astral团队用Rust开发的一个Python包解析与安装器。
它被设计为 pip 和 pip-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
贰丨问题¶
- 依赖包安装使用默认源,
pip的源配置对uv不适用。这个原因导致我必须挂代理才能使用
-
astral.sh,@charliermarsh,uv: Python packaging in Rust ↩