快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令
目录
- 1. uv 介绍
- 2. uv 安装(Windows版)
- 3. 快速模拟一个要发布到TestPyPI上的依赖包,scoful-test-lib
- 3.1 初始化 uv init
- 3.2 进入scoful-test-lib
- 3.3 修改pyproject.toml
- 3.4 使用命令 uv sync
- 3.5. 使用命令 uv lock
- 3.6 使用命令 uv build
- 3.7 获取testPyPI的token
- 3.8 发布到 testPyPI
- 3.9 验证,import scoful-test-lib
- 2. uv 常用命令
- 2.1 初始化项目 uv init xxx
- 2.2 构建虚拟环境 uv sync
- 2.3 更新共用版本lock文件 uv lock
- 2.4 增加依赖 uv add xxx
- 2.5 运行 uv run xxx.py
- 2.6 在虚拟环境快速调用工具 uvx xxx
- 2.7 详细官方文档地址
1. uv 介绍
-
简单说,uv 是一个用 Rust 编写的超快 Python 包管理和项目管理工具,旨在替代 pip、poetry、virtualenv 等传统工具。
-
换句话说,又是一个轮子,但是这个轮子用起来有点意思。首先,可能是因为太新了,还没被伟大的GFW识别到,也就是说,不用配置镜像源
-
然后,按官方的说法,下载安装包速度特别快,还贴了个图,看对比的确提升好大
-
最后,提供了一站式功能,从初始化项目,增加依赖,虚拟环境管理,Python版本管理,基础的运行Python单文件,工具管理等
-
个人用起来挺有意思的,不过才用了2-3天,新东西最大的问题就是更新快,但是网上的教程很多都滞后,甚至连AI都不例外,问它问题都是错误答案,最好的还是啃官方文档,这篇文章的目的就是记录一下这几天摄入的知识,防止遗忘
2. uv 安装(Windows版)
打开一个powershell,运行下面的命令:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
3. 快速模拟一个要发布到TestPyPI上的依赖包,scoful-test-lib
3.1 初始化 uv init
使用命令:uv init --lib scoful-test-lib
,这里注意了,加--lib
是因为需要Python依赖包的目录结构,也就是说要有__init__.py,如果是普通的项目,不需要加--lib
文件目录结构如下:
3.2 进入scoful-test-lib
使用命令:cd scoful-test-lib
,其中几个关键文件内容如下:
# __init__.py
# 注意这个hello函数,后面会引入调用一下
def hello() -> str:return "`Hello from scoful-test-lib!`"
# pyproject.toml
[project]
name = "scoful-test-lib" # 包名
version = "0.1.0" # 版本
description = "Add your description here"
readme = "README.md"
authors = []
requires-python = ">=3.10"
dependencies = [] # 添加的依赖[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
3.3 修改pyproject.toml
PS:发布到测试环境才需要
在pyproject.toml的最后追加,这个配置的意思是发布的时候可以指定发布到pypi的测试环境,不然默认就发到pypi的生产环境去了:
[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
publish-url = "https://test.pypi.org/legacy/"
explicit = true
3.4 使用命令 uv sync
这个命令的意思其实是,按uv.lock安装依赖并创建虚拟环境,虽然是新项目,也可以直接使用
3.5. 使用命令 uv lock
这个命令的意思是,基于pyproject.toml生成精确锁文件
3.6 使用命令 uv build
这个命令的意思是,生成编译后的文件,也就是要上传到TestPyPI上的文件
文件结构如下:
3.7 获取testPyPI的token
- 在 TestPyPI 注册一个账户
- 获取token需要绑定2FA,记得复制备份一下
3.8 发布到 testPyPI
- 执行命令:
uv publish --index testpypi
,后面这个index就是指定发布到测试环境的意思 - 回车后会提示输入账号命名,先输入:
__token__
,默认的 - password就输入上面获取的testPyPI的token
3.9 验证,import scoful-test-lib
-
打开这个,能看到已经发布成功了
-
使用
uv init test-install
,再新建一个项目,没有加–lib,看看文件结构,跟加了的不一样
-
再用
uv add --default-index https://test.pypi.org/simple/ scoful-test-lib
,把上面发布的scoful-test-lib
依赖加到test-install
项目里,可以在pyproject.toml里看到添加的依赖
# pyproject.toml
[project]
name = "test-install"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = ["scoful-test-lib>=0.1.0", # 这就是上面发布的scoful-test-lib,已经添加成功
][[tool.uv.index]]
url = "https://test.pypi.org/simple/"
default = true
- 修改
main.py
,引入scoful-test-lib
,内容如下
from scoful_test_lib import hello
# 细心的人会留意到这里,为啥包是scoful-test-lib,引入是scoful_test_lib,这是Python的设计,必须这样才不会报错def main():print("Hello from test-install!")print(hello())if __name__ == "__main__":main()
uv sync
一下- 直接运行
uv run main.py
,结果就是先打印Hello from test-install!
,再打印依赖包里的Hello from scoful-test-lib!
,成功! - 这就把整个链路打通了!
2. uv 常用命令
2.1 初始化项目 uv init xxx
如果是初始化包,uv init --lib xxx
2.2 构建虚拟环境 uv sync
uv 会自动检测虚拟环境状态,确保依赖与锁文件完全同步,避免手动激活环境的麻烦
2.3 更新共用版本lock文件 uv lock
执行uv lock会生成uv.lock,这个文件记录了所有依赖的精确版本和哈希值,确保团队成员或不同环境的安装结果完全一致
2.4 增加依赖 uv add xxx
比如:uv add requests
, uv add requests==2.31.0
,可指定版本
比如:uv add -r requirements.txt
,批量增加依赖
2.5 运行 uv run xxx.py
2.6 在虚拟环境快速调用工具 uvx xxx
这个命令不会污染本地环境,自建了一个虚拟环境来运行,非常好用
例子:uvx pycowsay 'scoful is awesome'
-------------------
< 'scoful is awesome' >-------------------\ ^__^\ (oo)\_______(__)\ )\/\||----w ||| ||
2.7 详细官方文档地址
https://docs.astral.sh/uv/reference/cli/
over, enjoy!!!
如对您有帮助,感谢投喂!