PyPI一键发布助手(专业版)

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

Python包发布到PyPI的完整工作流助手。覆盖:包名可用性检查、pyproject.toml元数据校验(description/readme/content-type/license/classifiers/dependencies/entry_points)、hatchling/setuptools构建wheel和sdist、twine check包格式校验、sdist文件白名单过滤(防止scripts/测试数据/敏感文件被打包)、使用用户提供的API Token通过环境变量安全上传、同步推送代码和tag到GitHub。触发词:"发布到pypi"、"上传pypi"、"发包"、"发布python包"、"publish to pypi"。

一句话选型结论

按资料字段整理

PyPI一键发布助手(专业版)是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_b710a0b0/pypi-upload-pro
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_b710a0b0仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791622133
正文体量9.5 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
PyPI一键发布助手(专业版)当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

9.5 KB
模型实际读到的说明书原文,来自技能仓库

PyPI 一键发布助手

把 Python 项目打包发布到 PyPI,全流程校验、构建、上传一条龙。

使用场景

  • "把这个包发布到 PyPI"
  • "上传到 pypi" / "发包" / "publish to pypi"
  • "上架 PyPI" / "让别人 pip install"

前置依赖

需要已安装 build 和 twine:

pip install build twine

工作流程

Step 0 — 信息收集

  1. 向用户确认:
    - 包名(pyproject.toml 中的 [project].name)
    - 版本号(语义化版本 X.Y.Z,参考 https://semver.org)
    - PyPI API Token(pypi- 开头的长字符串)
    - 是否已在 PyPI 注册账号
  2. 如果用户没提供 token,引导去 https://pypi.org/manage/account/token/ 生成
    - Scope 选 "Entire account"(首次发布新项目时必须)
    - 发布成功后建议用户把 scope 收紧到项目级别

Step 1 — 校验 pyproject.toml(⚠️ 关键字段检查清单)

检查清单:

字段 必填 说明
[project].name ✅ 包名,全小写连字符分隔(如 mysql-mcp-pro)
[project].version ✅ 版本号,与要发布的 tag 一致
[project].description ✅ 一句话介绍,显示在 PyPI 搜索结果
[project].readme ✅ {file = "README.md", content-type = "text/markdown"}
[project].requires-python ✅ >=3.10 等
[project].license ✅ {text = "MIT"} 或 {file = "LICENSE"}
[project].authors ✅ [{name = "..."}]
[project].keywords 推荐 搜索关键词列表
[project].classifiers 推荐 开发状态、受众、Python 版本、License、Topic
[project].dependencies ✅ 运行时依赖,带版本下限
[project].urls 推荐 Homepage / Repository / Issues / Changelog
[project.scripts] 可选 CLI 入口,cmd-name = "module:main"
[build-system] ✅ requires = ["hatchling>=..."], build-backend = "hatchling.build"

常见错误:
- ❌ readme = "README.md" 缺 content-type → PyPI 页面 markdown 不渲染
- ❌ 缺 license → 包列表不显示 license badge
- ❌ wheel 的 packages = ["."] 会把整个目录打包进去 → 应用 only-include = ["my_module.py"] 或正确的包路径
- ❌ 版本号带 v 前缀(v2.0.0),PyPI 版本必须是纯数字 2.0.0

Step 2 — 检查包名可用

import urllib.request, json
try:
    urllib.request.urlopen(f"https://pypi.org/pypi/{pkg_name}/json", timeout=5)
    print("已存在!")
except urllib.error.HTTPError as e:
    if e.code == 404:
        print("可用 ✓")

如果包名已被占用,提示用户改名(换个更独特的名字)。

Step 3 — 清理 + 构建

# 清理旧产物
rm -rf dist build *.egg-info

# 构建 wheel 和 sdist
python -m build

注意:
- 首次构建会创建隔离 venv 并安装 build-system requires,耐心等
- 成功后应输出 Successfully built xxx-X.Y.Z.tar.gz and xxx-X.Y.Z-py3-none-any.whl

Step 4 — 校验产物(twine check)

twine check dist/*

必须全部 PASSED,有错误必须修复后重新构建:
- The project's long_description has invalid markup → README.md 语法错误
- Missing meta-data: ... → pyproject.toml 缺字段

Step 5 — 检查 wheel 内容

python -c "
import zipfile, glob
whl = glob.glob('dist/*.whl')[0]
print('Wheel 包含文件:')
for n in zipfile.ZipFile(whl).namelist():
    print(' ', n)
"

# 同时检查 sdist(tar.gz)内容,防止 scripts/、测试数据、敏感文件被打包
python -c "
import tarfile, glob
sd = glob.glob('dist/*.tar.gz')[0]
with tarfile.open(sd) as t:
    print('sdist 包含文件:')
    for m in t:
        if m.isfile():
            print(' ', m.name)
"

sdist 关键配置(hatchling):

[tool.hatch.build.targets.sdist] 一定要用 include 白名单,默认会把所有 .py 文件打包,包括 scripts/、tests/、本地诊断脚本:

[tool.hatch.build.targets.sdist]
include = [
    "/server.py",       # 主模块
    "/README.md",
    "/LICENSE",
    "/.env.example",
    "/pyproject.toml",
    # 不要列 scripts/!不要列 tests/!
]

确认:
- 主模块/包文件在里面(server.py / mypackage/)
- *.dist-info/METADATA 存在
- *.dist-info/entry_points.txt 存在(如果定义了 CLI)
- LICENSE 被包含在 *.dist-info/licenses/
- 没有 .env、__pycache__、.git、scripts/(本地工具)、测试数据、含硬编码密码的文件
- 没有 任何含实际密码/token 的字符串(grep 搜索):
bash python -c " import tarfile, glob with tarfile.open(glob.glob('dist/*.tar.gz')[0]) as t: for m in t: if m.isfile(): data = t.extractfile(m).read().decode('utf-8', errors='replace') for needle in ['your_password','sk-','pypi-Ag','hardcoded_secret']: if needle in data: print(f'❌ {m.name} contains {needle}!') "

Step 6 — 上传到 PyPI(⚠️ Token 安全处理)

绝对不要把 token 写进命令行参数(会被 shell history 记录)或提交到代码。

正确方式:通过环境变量传:

TWINE_USERNAME=__token__ \
TWINE_PASSWORD='pypi-YourActualTokenHere' \
twine upload --non-interactive dist/*

关键点:
- 用户名固定 __token__(两个下划线)
- --non-interactive 避免卡住等待输入
- 上传完成后不要把 token 写到任何文件里
- 提醒用户:token 已使用完毕,可到 PyPI 后台删除或缩 scope

成功输出形如:

View at:
https://pypi.org/project/<pkg-name>/<version>/

Step 7 — 验证安装

上传成功后等 1-5 分钟(PyPI CDN 同步),验证:

# 新 venv 或临时目录
pip install --no-cache-dir <pkg-name>==<version>

# CLI 入口可用测试
<pkg-name> --help

Step 8 — 同步 Git tag + push

# 更新 pyproject.toml 中的 version(如果之前是占位符)
git add pyproject.toml
git commit -m "chore: release vX.Y.Z"
git tag -a vX.Y.Z -m "vX.Y.Z
<changelog 要点>"
git push origin main
git push origin vX.Y.Z

如果项目在 GitHub,自动发布 Release:

gh release create vX.Y.Z --title "vX.Y.Z" --notes "..."

一键命令模板

# 完整流程(假设 pyproject.toml 已配置好,token 存到环境变量)
pip install build twine
rm -rf dist build *.egg-info
python -m build
twine check dist/*
TWINE_USERNAME=__token__ TWINE_PASSWORD="$PYPI_TOKEN" twine upload --non-interactive dist/*
git tag -a v$(python -c "import tomllib;print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])") -m "release"
git push origin main --tags

TestPyPI(强烈建议先测)

首次发布或重大版本前,建议先用 TestPyPI 验证:

# 1. 去 https://test.pypi.org/account/register/ 注册
# 2. 生成 TestPyPI API token(test.pypi.org/manage/account/token/)
# 3. 上传到 test
TWINE_USERNAME=__token__ TWINE_PASSWORD='pypi-TestToken...' \
twine upload --repository testpypi --non-interactive dist/*

# 4. 从 test 安装验证
pip install --index-url https://test.pypi.org/simple/ <pkg-name>

TestPyPI 验证通过再上传到正式 PyPI,避免污染正式包索引。

常见坑

  1. 包名冲突:PyPI 包名全局唯一,被占了只能改名
  2. 版本号不能重传:同一个版本号不能上传两次,哪怕删了也不行
    - 如果上传后发现 metadata 要改(比如 description 有敏感词),必须升版本号(如 2.0.0 → 2.0.1)
    - 旧版本在 PyPI 上无法删除(只能 yank),pip install 默认装最新版,但老用户可能装到旧版
  3. README 中文乱码:确保文件 UTF-8 编码,content-type 正确
  4. wheel 不包含模块:[tool.hatch.build.targets.wheel] 配置错了
  5. sdist 默认包含所有源码:不加 include 白名单会把 scripts/ 测试/诊断脚本一起打包
  6. sdist 缺文件:[tool.hatch.build.targets.sdist].include 没列全
  7. Token 权限不足:新包首次发布必须用 account-scoped token;项目已存在后可用 project-scoped token
  8. 依赖版本过低:requires-python = ">=3.10" 但代码用了 3.11 语法 → 安装后运行报错
  9. 包元数据里别写敏感信息:description 字段里不要出现"hardcoded password"/"leaked"/"security fix"等字样,保持中性("improve configuration"/"bug fixes")
  10. twine upload 不要把 token 写命令行:会进入 shell history;用环境变量或 .pypirc

关联 skill

  • github-upload — PyPI 发布前先确保代码在 GitHub 上(方便 source distribution 溯源)

常见问题

5 问
答案由本站依据条目字段整理
PyPI一键发布助手(专业版)怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_b710a0b0/pypi-upload-pro。安装方式为未标注。装完刷新技能列表或重开客户端。

PyPI一键发布助手(专业版)支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

PyPI一键发布助手(专业版)权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

PyPI一键发布助手(专业版)收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

PyPI一键发布助手(专业版)用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。