在上一篇从零开始制作年轻人的第一款pip包 中我们介绍了如何通过通过最常见的方式发布一个pip包,一年过去了,今年我们整点新活,用uv进行发布!

什么是uv

uv是一个最近新出的工具,可用于python版本管理、虚拟环境管理、管理安装pip包、项目部署、配置同步等等

当然,最重要的原因只有一个字——快!
 

install-warm
https://github.com/astral-sh/uv/blob/main/BENCHMARKS.md

先安装uv

如果你已经有python了,非常简单

pip install uv

完事😎

当然你也可以通过其他方式安装,详见Installation | uv

 

新建一个uv项目

新建一个文件夹,然后创建虚拟环境,然后初始化uv项目

uv venv -p 3.10 #指定项目的python版本
uv init

虚拟环境默认安装在执行路径的.venv文件夹,激活虚拟环境,就可以直接使用了

source .venv/bin/activate #macos
#.venv/python/activate.exe #windows

比如这样

❯ source .venv/bin/activate
❯ which python
/Users/ww/coding/ocr-cli/.venv/bin/python

同时你也会看到当前路径下多了一个pyproject.toml文件,这里记录了这个uv项目的相关信息

如果你需要给这个项目增加一些依赖包,使用

uv add pip包名

接下来用这个虚拟环境开发好你的pip包,本教程跳过这一环节,默认你已经开发好且测试好了

用uv 构建并发布pip包到pypi

在前面通过uv init创建的pyproject.toml,就可以取代传统的setup.py,如果你不熟悉setup.py,请复习一下从零开始制作年轻人的第一款pip包

除了uv专用的一些功能,针对pip包的部分写法基本是一致的,具体请看Packaging Python Projects - Python Packaging User Guide

比如我的pyproject.toml长这样(简化后)


requires = ["setuptools>=45", "wheel"]

build-backend = "setuptools.build_meta"



[project]

name = "deepseek-ocr-cliv2"

version = "0.1.3"

description = "ocr识别命令行工具"

readme = "README.md"

requires-python = ">=3.10"

license = { file = "LICENSE" }

classifiers = [

"License :: Other/Proprietary License",

"Programming Language :: Python :: 3.10",

"Programming Language :: Python :: 3.11",

"Programming Language :: Python :: 3.12"

]

dependencies = [

"requests>=2.32.5",

]



[project.urls]

Homepage = "https://github.com/whitewatercn/deepseek-ocr-cli"

Repository = "https://github.com/whitewatercn/deepseek-ocr-cli"



[project.scripts]

dsocr = "dsocr.main:main"



[tool.setuptools.package-dir]

dsocr = "dsocr_core/dsocr"



[tool.setuptools.packages.find]

where = ["dsocr_core"]

include = ["dsocr*"]

接下来就可以build了,你不需要安装wheel twine这两个pip包,直接使用uv内置的功能就行

uv build  -o ./dist    
# -o指定输出目录

⚠️注意后面一定要加参数 -o ./dist,不然会构建到home目录里去,publish时找不到构建出来的内容

这时你就会看到/dist文件夹下两个文件

❯ ls dist
deepseek_ocr_cliv2-0.1.4-py3-none-any.whl
deepseek_ocr_cliv2-0.1.4.tar.gz

然后用uv内置的功能发布,下面这样就发布成功了!

❯ uv publish
Publishing 2 files to https://upload.pypi.org/legacy/
Enter username ('__token__' if using a token): __token__
Enter password: 
Uploading deepseek_ocr_cliv2-0.1.4-py3-none-any.whl (5.2KiB)
Uploading deepseek_ocr_cliv2-0.1.4.tar.gz (4.2KiB)

⚠️本文撰写的时候,pypi已经不允许通过账户、密码发布了,必须通过token发布,如何获取token详见从零开始制作年轻人的第一款pip包

撒花庆祝

比起通过twine发布的方式,uv build 和 publish都快了很多

你可以尝试修改我的源码whitewatercn/deepseek-ocr-cli,自己发布一下

本来想写一个使用硅基流动apikey调用deepseekocr的api,写完才发现已经有一堆人发布了,本项目中止😅

https://pypi.org/search/?q=deepseek-ocr
0
0