使用 uv 发布 Python 包到 PyPI 教程

本教程将指导你使用 uv 工具创建一个 Python 包并将其发布到 PyPI。uv 是一个快速、现代的 Python 包管理工具,适合替代传统的 pipsetuptools

前提条件

  1. 安装 Python(建议 3.8 或以上版本)。
  2. 拥有一个 PyPI 账户(在 PyPI.org 注册)。
  3. (可选)如果你需要发布到 TestPyPI,可以在 test.pypi.org 注册。

安装 uv

pip install uv 

步骤 1:创建项目结构

    • pyproject.toml:项目的元数据和依赖配置文件。
    • src/my_python_package/__init__.py:包的初始化文件。
    • name:包的名称,需在 PyPI 上唯一。
    • version:包的版本号,建议遵循 SemVer
    • description:包的简短描述。
    • authors:作者信息。
    • readme:指向 README 文件(稍后创建)。
    • license:许可证类型(如 MIT、Apache-2.0 等)。

src/my_python_package/__init__.py 中添加一些示例代码:

defhello():return"Hello from my-python-package!"

创建 README.md 文件,描述你的项目:

echo"# My Python Package\n\nA simple Python package for demonstration purposes."> README.md 

检查 pyproject.toml,确保内容正确。以下是一个示例:

[project] name = "my-python-package" version = "0.1.0" description = "A simple Python package" authors = [{name = "Your Name", email = "[email protected]"}] dependencies = [] requires-python = ">=3.8" readme = "README.md" license = {text = "MIT"} [build-system] requires = ["hatchling"] build-backend = "hatchling.build" 

初始化项目:

uv init 

uv init 会生成一个基本的项目结构,包含以下文件:

创建一个新目录作为你的项目根目录:

mkdir my-python-package cd my-python-package 

步骤 2:添加依赖(可选)

如果你的包需要依赖其他库,可以通过 uv 添加:

uv add requests 

这会更新 pyproject.toml,在 [project.dependencies] 中添加 requests

步骤 3:测试你的包

运行测试:

uv run pytest 

安装测试依赖(如 pytest):

uv add --dev pytest 

创建一个简单的测试文件 tests/test_hello.py

from my_python_package import hello deftest_hello():assert hello()=="Hello from my-python-package!"

步骤 4:构建包

使用 uv 构建你的包,生成分发文件(wheel 和 source distribution):

uv build 

构建完成后,生成的 .whl.tar.gz 文件会出现在 dist/ 目录中。

步骤 5:配置 PyPI 凭据

  1. 获取 PyPI API 令牌:
    • 登录 PyPI.org,进入账户设置。
    • 创建一个新的 API 令牌,选择合适的权限(通常是“上传”权限)。
    • 将生成的令牌复制到 ~/.pypircpassword 字段。

创建或编辑 ~/.pypirc 文件,添加 PyPI 和 TestPyPI(可选)的配置:

[distutils] index-servers = pypi testpypi [pypi] username = __token__ password = pypi-<your-api-token> [testpypi] repository = https://test.pypi.org/legacy/ username = __token__ password = pypi-<your-testpypi-api-token> 

步骤 6:发布到 TestPyPI(可选)

在正式发布到 PyPI 前,建议先上传到 TestPyPI 测试:

uv publish --index testpypi 
  • 检查 TestPyPI 上是否成功上传。

安装并测试你的包:

uv pip install --index-url https://test.pypi.org/simple/ my-python-package 

步骤 7:发布到 PyPI

如果 TestPyPI 测试通过,发布到正式 PyPI:

uv publish 
  • 确认包是否成功上传到 PyPI.org

测试安装:

uv pip install my-python-package 

步骤 8:验证安装

创建一个新的虚拟环境并安装你的包:

uv venv source .venv/bin/activate # Linux/Mac .venv\Scripts\activate # Windows uv pip install my-python-package 

运行 Python 解释器并测试:

import my_python_package print(my_python_package.hello())

注意事项

  • 包名冲突:确保你的包名在 PyPI 上是唯一的。如果包名已被占用,修改 pyproject.toml 中的 name 字段。
  • 版本号:每次发布新版本时,更新 pyproject.toml 中的 version 字段。
  • 文档:完善 README.md,添加使用说明、安装方法和示例代码。
  • 许可证:选择合适的许可证(如 MIT),并添加 LICENSE 文件。
  • 安全性:不要在公开代码中存储 PyPI 令牌,建议使用环境变量或 CI/CD 工具(如 GitHub Actions)管理。

常见问题

  1. 上传失败:检查 ~/.pypirc 中的令牌是否正确,或者网络连接是否正常。
  2. 包名已存在:选择一个新包名或联系 PyPI 管理员。
  3. 依赖问题:确保 pyproject.toml 中的依赖版本范围合理。

Read more

具身智能探索:从感知到行动的机器人实践

具身智能探索:从感知到行动的机器人实践

文章目录 * 每日一句正能量 * 引言 * 什么是具身智能? * 初探具身智能:一个简单的四足机器人案例 * 环境搭建 * 感知:用摄像头和深度传感器采集环境信息 * 推理:基于深度强化学习的决策 * 行动:控制四足机器人动态行走 * 图片展示 * 总结与展望 每日一句正能量 没有人会为了你的未来买单,你要么努力向上爬,要么烂在社会最底层的泥淖里,这就是生活。 引言 近年来,“具身智能”成为机器人领域的热门话题,它不仅仅是让机器人“看起来像人”,而是让机器人通过身体与环境的交互,真正“理解”并“学习”世界。这篇文章将带领大家一起探索具身智能的核心思想,并通过一个简单的机器人项目,从感知、推理到行动,完整展示如何构建一个具身智能系统。本文还包含代码片段和实验图片,希望能帮助你更直观地理解这一前沿技术。 什么是具身智能? 具身智能(Embodied Intelligence)的核心理念是:智能来源于身体与环境的交互,而非仅仅依赖于抽象的计算能力。这个思想最早由人工智能哲学家罗德尼·布鲁克斯提出,他认为传统的“感知-思考-行动”

By Ne0inhk
【MySQL】第十三节—索引:底层原理、B + 树演进、操作实战

【MySQL】第十三节—索引:底层原理、B + 树演进、操作实战

Hello,好久不见,我是云边有个稻草人-个人主页,与你分享C++领域专业知识! 《MySQL》——本篇文章所属专栏,持续更新中 本文深入解析MySQL索引原理与操作。首先通过实验展示数据默认有序现象,解释Page机制减少IO次数的原理。然后循序渐进分析B+树结构的优势:从单页线性遍历、引入目录到多级目录页构建,最终形成高效的B+树索引。文章对比了B+树与B树、哈希等结构的差异,阐述聚簇索引与非聚簇索引的本质区别。在操作层面,详细介绍了主键索引、唯一索引、普通索引和全文索引的创建与删除方法,并给出索引使用原则:频繁查询字段适合建索引,但更新频繁或唯一性差的字段不宜建索引。最后提及复合索引的最左匹配原则和索引覆盖优化技巧。 【MySQL】第十二节—不懂磁盘与 Page,谈何用好 MySQL 索引?——索引上篇 目录 5. 索引的理解 (1)一个现象和一个结论 (2)循序渐进,理解索引的数据结构为什么选择B+树 第一层—线性遍历效率低下 第二层—引入目录

By Ne0inhk
Android 蓝牙 BLE 扫描 Native 层架构与扫描流程剖析

Android 蓝牙 BLE 扫描 Native 层架构与扫描流程剖析

博主简介 byte轻骑兵,现就职于国内知名科技企业,专注于嵌入式系统研发,深耕 Android、Linux、RTOS、通信协议、AIoT、物联网及 C/C++ 等领域。乐于技术分享与交流,欢迎关注互动! 📌 主页与联系方式ZEEKLOG:https://blog.ZEEKLOG.net/weixin_37800531知乎:https://www.zhihu.com/people/38-72-36-20-51微信公众号:嵌入式硬核研究所邮箱:[email protected](技术咨询或合作请备注需求) ⚠️ 版权声明 本文为原创内容,未经授权禁止转载。商业合作或内容授权请联系邮箱并备注来意。 本文基于 Android 蓝牙源码中 BLE 扫描相关的 Native 层代码,以scanInitializeNative为入口,系统梳理 BLE 扫描从 JNI

By Ne0inhk