【Python】开发工具uv

1. uv install

1.1 下载安装脚本来安装

# 用curl
curl -LsSf https://astral.sh/uv/install.sh | sh

# 用wget
wget -qO- https://astral.sh/uv/install.sh | sh

1.2 使用pipx安装uv

补充:pipx是安全地安装和运行隔离的 Python 命令行工具,它能够解决全局安装python应用( pip install --usersudo pip install)的依赖冲突和环境污染问题。

sudo pip install <pkg>
安装的可执行文件位置:/usr/local/bin
安装的库文件位置:
/usr/local/lib/pythonX.X/dist-packages/ (Debian/Ubuntu)
/usr/lib/pythonX.X/site-packages/ (RHEL/CentOS)

pip install --user <pkg>
安装的可执行文件位置:~/.local/bin/
安装的库文件位置:~/.local/lib/pythonX.X/site-packages/

pipx install <pkg>
将每个工具安装在独立的虚拟环境中
~/.local/pipx/venvs/flake8/     # flake8 的独立环境

# 先安装pipx
sudo apt install pipx

# 再安装uv
pipx install uv
pipx ensurepath && source ~/.basrc

1.3 补充

  • pipx依赖venv,需要确保venv全局安装。sudo apt install python3.8-venv
  • pip安装提示,Not installing to existing directory。可能是之前失败安装存在残留文件。pipx install --force
  • 安装uv后还需要将可执行文件目录添加到$PATH。执行pipx ensurepath可以自动把pipx下载的工具的可执行文件目录都添加到$PATH

2. 考虑在离线系统上安装uv

2.1 下载并上传安装包

# 使用pip下载,.whl安装包在当前目录,可能有多个.whl文件,所以打包
pip download uv
cd .. && tar -zcvf uv.tar.gz uv/

scp uv.tar.gz cg@192.168.250.234:~/Downloads/

2.2 用户级安装uv(~/.local/bin/)

# 解压
cd ~/Downloads/
tar -zxvf uv.tar.gz

# 安装到用户级site-package
pip install --no-index --find-links=~/Downloads/uv uv
--no-index:禁止从 PyPI 下载。
--find-links=.:从当前目录查找包。

# 添加~/.local/bin到$PATH
echo 'export PATH=$HOME/.local/bin:$PATH'

2.3 补充

Q:安装包为uv-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl,包名:uv;包版本:0.7.3;python兼容版本:python3;abi标签:none,表示不依赖python abi(不依赖任何扩展的纯python包);架构:x86_64;系统兼容性:manylinux标准(manylinux_2_17和manylinux2014)。目标机器架构为arm,无法安装这个安装包。
A:确认安装包的平台版本和目标系统平台兼容,目标系统是x86_64的,则安装包应该是x86_64d的, 目标系统是arm结构的,安装包应该是arm架构的。

3. uv 管理Python解释器

# 查看uv可安装和已经安装的python版本
uv list python

# 安装指定版本的python,安装位置 /home/user01/.local/share/uv/python/
uv python install cpython-3.12

# 使用已安装的某个版本的python解释器执行
uv run -p 3.12 main.py

# 使用已安装的某个版本的python解释器进入交互式执行环境
uv run -p 3.12 python

ps: uv指定python解释器版本时,如果uv没有安装之,则会自动安装它

4. uv 管理依赖

# 创建工程
mkdir test && cd test
uv init -p 3.12

# 目录树
tree
├── .git
├── .gitignore
├── .python-version  # 3.12
├── README.md
├── main.py
└── pyproject.toml  # 跟踪项目当前依赖

# 假设项目源码文件依赖和pyproject.toml记录的不一样
uv sync

5. uv运行代码

5.1 uv不在项目下执行脚本

# main.py
import requests

if __name__ == '__main__':
    url = 'www.baidu.com'
    resp = requests.get(url)
    print(resp.text)

# 执行脚本,未导入依赖报错
uv run main.py

# 执行脚本,命令行中指定依赖,依赖下载到~/.cache/uv
uv run --no-project --with rich main..py

5.2 uv在项目下执行脚本

# 进入项目
cd test

# 执行脚本,未导入依赖错误
uv run main.py

# 执行脚本,命令行中指定依赖,依赖下载到~/.cache/uv
uv run --with requests main.py

# 执行脚本,使用项目的虚拟环境维护依赖
uv add requests  # pyproject.toml记录了requests及其依赖
uv run main.py

# 打印uv工程依赖树
uv tree

test v0.1.0
└── requests v2.32.3
    ├── certifi v2025.4.26
    ├── charset-normalizer v3.4.2
    ├── idna v3.10
    └── urllib3 v2.4.0

 
# 从项目中以础依赖
uv remove requests

5.3 uv执行脚本,脚本自己维护依赖

# 脚本自己加上所需依赖
uv add --script main.py requests

# uv将往main.py头插入记录依赖信息的注释
# /// script
# requires-python = ">=3.13"
# dependencies = [
#     "requests",
# ]
# ///

import requests

if __name__ == '__main__':
    url = 'https://www.baidu.com'
    resp = requests.get(url)
    print(resp.text)

# 执行,以脚本模式运行,即使在uv项目中也可以不加--no-project而运行
uv run --script main.py

5.4 补充

• uv初始化项目后首次执行run会先创建项目虚拟环境:.venv
• 在uv项目中,uv run xxx.py将以项目方式运行(使用项目的虚拟环境);在uv项目中,uv run --with xxx将使用临时环境(~/.cache/uv/);在项目中,uv run --script main.py将使用临时环境(~/.cache/uv),但是脚本自己可以维护依赖,而不必在命令行中用–with来指定依赖。

6. python开发工具管理

开发需要python工具,可将这些工具添加到项目依赖,但这些工具不应该随其他项目依赖打包。
uv add flake8 --dev

但是实际工程中,这些工具应该与项目无关,需要在其他地方维护。另外即使通过–dev可以避免项目打包时把工具打包进去,但是添加工具时可能添加工具自己的依赖到项目中而污染了项目的虚拟环境。正确做法时使用uv tool来维护这些工具。

# 工具安装到~./cache/uv/
uv tool install flake8

# 查看已经安装的工具
uv tool list

7. 项目打包为.whl文件

# pyproject.toml文件中添加session
[project]
name = "p10-tmp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = []

[prject.scripts]
test = ["test:main"]


# 打包
uv build 
dist
├── p10_tmp-0.1.0-py3-none-any.whl
└── p10_tmp-0.1.0.tar.gz


# 安装离线包
uv tool install dist/p10_tmp-0.1.0-py3-none-any.whl

补充

Q&A
Q:pip如何确定package安装到系统目录还是用户目录
A:pip根据以下要素判断该把package放到哪里:

  1. 是否添加–user参数:加–user参数,package放到用户级site-package中
  2. 是否处于虚拟环境激活状态:虚拟环境激活状态,package放在虚拟环境的site-package中
  3. 普通用户还是特权用户(root用户或者sudo pip install):普通用户则放在用户的site-package,特权用户则放在系统site-package中。
    注意,普通用户执行pip install 等价于pip install --user .

more about pip

• --user parameter
pip install --help
–user: Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on Windows. (See the Python documentation for site.USER_BASE for full details.)

• pip’'s doc
https://packaging.python.org/en/latest/tutorials/installing-packages/

### Python 打包工具 UV 的使用方法 UV 是一种高效的 Python 包管理工具,旨在简化开发者的工作流程并提供一致的环境配置体验[^1]。以下是关于如何使用 UV 进行 Python 开发的相关说明。 #### 安装 UV 要安装 UV,可以通过官方文档或其他可信渠道获取安装脚本。通常情况下,可以直接运行以下命令完成安装: ```bash curl https://get.uv.sh | bash ``` 此命令会自动检测操作系统,并下载适合的二进制文件进行安装。 #### 配置 Python 环境 一旦 UV 被成功安装,即可利用其内置功能来管理和切换不同的 Python 版本。例如,如果需要安装特定版本的 Python,则可以执行以下命令: ```bash uv python install 3.9 ``` 上述命令会让 UV 自动从官方网站下载指定版本的 Python 并将其添加至系统的 PATH 中。 #### 创建项目结构与依赖管理 对于新项目的初始化,推荐创建 `pyproject.toml` 文件用于定义构建系统和其他元数据信息。假设当前目录下已经存在一个名为 `setup.py` 或者其他形式的描述符文件,那么可通过以下方式生成锁文件(lock file),从而固定所有依赖项的具体版本号: ```bash uv lock generate --output=uv.lock ``` 这一步骤类似于传统 Pipenv 流程中的 `Pipfile.lock` 生产过程,不过最终产物被命名为 `uv.lock` 来区分不同工具链之间的差异[^4]。 #### 构建分发档案 当准备分享自己的库或者应用程序给其他人时,就需要借助于 sdist (source distribution) 和 wheel (binary distribution) 形式的压缩包。这些操作同样能够由 UV 提供的支持轻松实现: ```bash uv build . ``` 该指令会在本地路径上查找必要的元数据源码位置,并按照 PEP 517/PEP 518 标准规范打包成果物[^2]。 --- ### 注意事项 尽管 UV 功能强大且易于学习掌握,但在实际应用过程中仍需注意一些细节问题: - **多版本共存处理**:由于许多用户的机器可能同时拥有多个解释器实例,在调用相关 CLI 命令前务必确认目标对象无误; - **跨平台兼容性验证**:考虑到 Windows/Linux/macOS 存在细微差别之处,建议尽可能多地测试各种场景下的行为表现一致性; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值