按照 Python 工具链分类 UV属于大全包的工具 只是更偏向于一般的Python项目
- 环境管理
- 包管理
- Python 版本管理
- 包构建
- 包发布
后面俩都很简单 看看文档就好了
下面快速了解一下 UV 在各方面的使用和与其他工具的兼容性(主要是miniconda/micromamba)
下面是安装命令 会下载 uv 和 uvx (uvx == uv tool run)
| |
run-script
uv 可以直接执行脚本 附带功能
- 指定 Python 版本
- 自动安装依赖
- 自动安装 Python
对于单脚本而言 相当于
pip install+python
| |
| |
env-manage
uv 的环境管理基于 venv 整体上是比较简单的
使用 uv pip install 下载包 会自动检测环境并添加相关依赖
tool-usage
uv tool 可以使用和安装工具 (带CLI的Python包) 这部分跟 pipx 差不多
主要功能是为工具安装独立的环境 然后将工具入口放置在统一路径下
uv tool run/uvx/pipx run临时使用工具uv tool install <tool>/pipx install <tool>下载工具到默认路径 持久化保存- uninstall/list/…
python-manage
uv 的 Python 版本管理的方式为统一下载 然后使用时根据配置信息选用
下载信息如下
| |
下载方式有两种 (默认存储路径: ~/.local/share/uv/python/)
| |
脚本头如下
| |
project-usage
与项目相关的操作具体是
uv init初始化项目uv add/remove依赖管理uv lock/synclockfile管理uv run执行项目uv build构建项目
project-example
使用 uv 的项目实操 以 adbili 为例
init
一般是 uv init YOUR_PROJECT 创建项目 或者 uv init . 初始化已有项目
但这里是需要打包成为工具 所以 uv init --package -p 3.10 . 同时指定Python版本 (用3.10是为了 typing hint)
dependency
给项目添加依赖: uv add -r requirements.txt
这里注意一下 需要给 uv 换源 毕竟 uv 不读取 ~/.config/pip/pip.conf
| |
run
因为这里是打包为工具 所以需要注意 要在 __init__.py 暴露 main 函数作为默认程序入口 如下示例
| |
uv run adbili <args> 执行项目
publish
后续直接
uv builduv publish
就完工了
然后就可以在 PyPI 上看见 adbili
conclusion
总体来说 uv 和 miniconda/micromamba 是比较正交的
uv 优势在于
- 执行一些小脚本方便 个别依赖可以直接添加
- 对于项目依赖独立 方便管理
- Python项目创建到发布一站式服务
miniconda/micromamba 优势在于
- 环境不是基于项目的 可以到处共享
- 可以装一些非pypi包
主要还是对于深度学习项目友好