欢迎光临
我们一直在努力

软件研发干货入门-前后端环境必备工具-uv(python包管理)

一、官网

https://docs.astral.sh/uv/

  • 一个用Rust编写且极其快速的Python包和项目管理器。
  • 一站式提供: Python版本安装与切换 虚拟环境创建与隔离 依赖安装、锁定与更新 项目构建、打包与发布
  • 本文提供两种使用uv的思想,仅供参考。 官方参考链接:概念 命令 设置 临时目录

二、 现代方式

替代 pip+pipx+virtualenv+pip-tools+poetry+pyenv+twine等 ,让环境搭建与项目管理更简单、更高效 依赖管理:支持 pyproject.toml/requirements.txt。 团队主要选型uv,主要使用 pyproject.toml+uv.lock、有兼容requirements.txt的需求

1.以uv为基础,独立安装

WinGet安装uv

winget install –id=astral-sh.uv -e

2.安装与配置python(UV支持下载和安装CPython、PyPy和Pyodide发行版。)

https://docs.astral.sh/uv/concepts/python-versions/ https://docs.astral.sh/uv/reference/cli/ https://docs.astral.sh/uv/reference/settings/

uv python 常用命令

//查看所有安装过的版本(默认配置下,可安装的版本会提示,当设置仅显示托管的,就只显示托管的安装<=>uv python list –managed-python)
uv python list

//显示可用的python版本
uv python list –only-downloads

//仅查看托管的
uv python list –managed-python

//仅查看系统安装的
uv python list –no-managed-python

//安装指定版本
uv python install 3.11.14

//卸载指定版本
uv python uninstall 3.12.12

如果你的系统已经安装了Python,UV会检测并使用它,无需配置。推荐使用 UV 托管的版本。 (1)可通过偏好配置仅使用UV托管的版本(为保证开发团队版本一致性约束) (2)默认会自动下载(当命令指定版本,版本不存在时),可设为显式下载

// 修改 %APPDATA%\\uv\\uv.toml (修正不让自动下载、只使用uv托管)
python-downloads = "manual" 显式下载
python-preference = "only-managed" 仅使用托管的Python安装, 影响uv python list 显示(不会再显示系统的了)
python-install-mirror = "https://github.com/astral-sh/python-build-standalone/releases/download" 镜像源

修改python全局默认版本号(用户级)

//修改 %APPDATA%\\uv\\.python-version (或者uv python pin –global 3.11 )
3.11

支持以下 Python 版本请求格式(uv python list –only-downloads 查看后对照安装):

<version>(例如 3 3.12 3.12.3)
<version-specifier>(例如,>=3.12,<3.13)
<version><short-variant>(例如,3.13t 3.12.0d)
<version>+<variant>(例如,, ,3.13+freethreaded 3.12.0+debug3.14+gil)
<implementation>(例如,或cpython cp)
<implementation>@<version>(例如,cpython@3.12)
<implementation><version>(例如,或cpython3.12 cp312)
<implementation><version-specifier>(例如,cpython>=3.12,<3.13)
<implementation>-<version>-<os>-<arch>-<libc>(例如,cpython-3.12.3-macos-aarch64-none)

python国内镜像源修改

南京大学: https://mirror.nju.edu.cn/github-release/astral-sh/python-build-standalone/
兰州大学: https://mirrors.lzu.edu.cn/github-release/astral-sh/python-build-standalone/
阿里云:https://registry.npmmirror.com/-/binary/python-build-standalone/

三、传统方式基础上,使用uv。

注意工具边界管理,仅使用现代包安装与依赖管理、打包、发布等。 依赖管理:支持 pyproject.toml/requirements.txt。 项目多且复杂、有高级打包需求、对pip工具链依赖太深。

1.已搭建(python+pip+pipx+virtualenv)开发环境,在此基础上扩展UV兼容

使用pipx安装uv

pipx install uv

2.与独立安装uv一样,可以禁止自动下载而显示的安装python,可以仅使用托管安装的python;

四、现代项目管理

1. 创建项目(uv init)

uv 支持两类基本模板:应用程序和库,默认创建应用程序。

uv init 创建应用,以目录名为名称
uv init myapp 创建应用,自定义应用名称
uv init –lib mylib 创建库(可以打包分发)
//不使用uv的模板,只生成项目依赖文件(pyproject.toml 和 uv.lock)而不生成应用代码文件
uv init –bare .

创建成功后,会自动根据全局python版本号,创建当前项目python版本文件.python-version、依赖文件pyproject.toml,应用程序或库目录结构与基础文件

可以使用以下命令,配置 uv的全局python版本号:

uv python pin –global 3.11

2. 修正当前项目python版本号(uv python pin )

项目开始或接到一份源码,我们会先确定使用的python版本

uv python pin 3.11 //确定当前项目版本号,如果没有.python-version则创建

3. 更新项目环境(uv sync)

如果未创建虚拟环境,会自动根据当前项目版本号创建项目环境。 同步确保所有项目依赖都已安装并与锁文件保持最新。

uv sync

4. 依赖包管理(uv add 、uv remove)

如果未创建虚拟环境,会自动根据当前项目版本号创建项目环境。

uv add <package_name> 添加依赖包,uv add requests==2.31.0 指定精确版本
uv remove <package_name> 移除依赖包

5. 更新项目的锁文件(uv lock)

如果项目锁文件(uv.lock)不存在,则会创建它。它主要用来确保依赖树的确定性、可重现性; 项目源码迁移时,库版本号做到确定性,与原环境一致性,顶层依赖可以在pyproject.toml看到,面向开人员的)。

uv lock

uv export > requirements.txt 导出安装依赖为需求文件,当未做uv lock时,自动创建

6. 查找可用的依赖包与配置依赖包的源

https://docs.astral.sh/uv/concepts/configuration-files/ https://docs.astral.sh/uv/reference/settings/

默认包源是PyPI,可去官网查包:https://pypi.org/ 可以修改默认源,配置优先级:命令>环境变量>项目级>用户全局级

6.1 在项目级别配置 (pyproject.toml)

[tool.uv]
index-url = "https://pypi.org/simple"
[tool.uv.pip]
extra-index-url = ["https://mirrors.aliyun.com/pypi/simple/"]

6.2 在用户全局级别配置 (uv.toml)

Linux/macOS: ~/.config/uv/uv.toml Windows: %APPDATA%\\uv\\uv.toml

index-url = "https://pypi.org/simple"
[pip]
extra-index-url = ["https://mirrors.aliyun.com/pypi/simple/"]

阿里云: https://mirrors.aliyun.com/pypi/simple/ 清华大学: https://pypi.tuna.tsinghua.edu.cn/simple/ 腾讯云: https://mirrors.cloud.tencent.com/pypi/simple/

7. uv缓存管理

uv cache clean 清除缓存,删除所有条目或与特定包相关的条目
uv cache prune 从缓存中修剪所有无法访问的对象
uv cache dir 显示缓存目录
uv cache size 显示缓存大小

8. 项目运行(运行命令或脚本)

当前目录或父目录中找到虚拟环境,则该命令将在该环境中执行。否则,命令将在发现的解释器环境中执行

uv run myapp.py //无需显式激活虚拟环境,使用uv命令的最佳实践(不用按传统pip的哪一套需要激活虚拟环境下管理运行项目)

五、库的打包与分发

https://docs.astral.sh/uv/reference/cli/#uv-build https://docs.astral.sh/uv/reference/cli/#uv-publish

六、兼容传统方式的能力(uv pip)

开发阶段传统命令uv 命令
环境创建 python -m venv .venv uv venv
激活环境 .venv\\Scripts\\activate 完全相同
Python 3.11环境 py 3.11 -m venv .venv uv venv –python 3.11
安装单个包 pip install requests uv pip install requests
从文件安装依赖 pip install -r requirements.txt uv pip install -r requirements.txt
可编辑安装项目 pyproject.toml 安装 pip install -e . uv pip install -e .
列出已安装包 pip list uv pip list
导出依赖到文件 pip freeze > requirements.txt uv pip freeze > requirements.txt
运行脚本(自动探测环境) py main.py uv run python main.py
运行模块 python -m mymodule uv run python -m mymodule
卸载包 pip uninstall package uv pip uninstall package

七、uv-tools(替代如pipx等的命令行工具)

命令组合功能描述举例说明(用例)
uv tool run <package_command> 运行一个Python包提供的命令。此命令会自动处理环境并安装依赖,然后运行指定命令。 uv tool run ruff check
uv tool install <package> 安装一个Python包及其提供的命令工具。安装后,该命令可以在系统的任意目录下使用。 uv tool install build
uv tool upgrade <package> 升级一个已经安装的Python工具包到最新版本。 uv tool upgrade hatch
uv tool list 列出所有通过uv tool install安装的Python工具包。 uv tool list
uv tool uninstall <package> 卸载一个之前安装的Python工具包。 uv tool uninstall twine
uv tool update-shell 确保系统环境变量PATH包含uv的工具目录路径。通常只需要在首次安装完一个新工具后运行一次。 uv tool update-shell
uv tool dir 显示uv存放已安装工具脚本的目录路径。 uv tool dir
赞(0)
未经允许不得转载:171主机测评 » 软件研发干货入门-前后端环境必备工具-uv(python包管理)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址