技能 python-packaging
📦

python-packaging

低风险 ⚙️ 外部命令🌐 网络访问📁 文件系统访问

使用 PyPI 构建和发布 Python 包

也可从以下获取: wshobson,ActiveInferenceInstitute

Python 开发者在复杂的打包工作流和不一致的项目结构中面临挑战。本技能提供完整的指导,使用 pyproject.toml 和 setuptools 等现代标准创建专业的 Python 包。

支持: Claude Codex Code(CC)
📊 71 充足
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“python-packaging”。 为名为 'data-utils' 的包创建 pyproject.toml,包含 Click 和 pandas 依赖、pytest 开发依赖以及 CLI 入口点

预期结果:

完整的 pyproject.toml,包含构建系统配置、项目元数据、带版本约束的依赖项、可选开发依赖、CLI 脚本入口点,以及 black、ruff 和 pytest 的工具配置。

正在使用“python-packaging”。 如何先将我的包发布到 TestPyPI?

预期结果:

分步说明:(1) 安装 twine,(2) 使用 python -m build 构建包,(3) 使用 twine check 验证,(4) 使用 twine upload --repository testpypi 上传到 TestPyPI,(5) 测试从 TestPyPI 安装,(6) 准备好后发布到生产 PyPI。

安全审计

低风险
v1 • 2/24/2026

This skill consists entirely of markdown documentation teaching Python packaging best practices. Static analyzer flagged 118 patterns (backticks, URLs, config examples) that are documentation content, not executable code. All findings are false positives from code examples in fenced markdown blocks. No actual security risks detected.

2
已扫描文件
909
分析行数
6
发现项
1
审计总数
中风险问题 (1)
Documentation flagged as code execution
Static analyzer detected backtick characters in markdown documentation. These are fenced code block delimiters in documentation, not actual shell execution. The skill contains no executable Python or shell code - only educational content about Python packaging practices.
低风险问题 (2)
Documentation URLs flagged as network activity
Static analyzer detected hardcoded URLs in documentation. These are reference links to PyPI, GitHub, and Python packaging resources - not actual network requests in code.
Configuration examples flagged as sensitive file access
Static analyzer detected .pypirc configuration file references. This is documentation teaching users how to configure PyPI authentication - not unauthorized file access.
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
50
社区
81
安全
91
规范符合性

你能构建什么

库作者发布

创建新的 Python 库以在 PyPI 上分发,包含正确的项目结构、元数据和自动化发布工作流。

CLI 工具分发

使用入口点打包命令行工具,使其可以通过 pip 安装并通过可执行命令运行。

企业包管理

设置私有包索引和命名空间包,用于跨多个团队和仓库组织代码。

试试这些提示

创建基本 Python 包结构
帮我创建一个名为 'my-tool' 的新 Python 包,使用 src 布局、使用 setuptools 的 pyproject.toml,以及基本模块结构。我想包含 pytest 用于测试。
向现有包添加 CLI 入口点
我有一个包含实用函数的现有 Python 包。展示如何使用 Click 添加 CLI 入口点,以便用户在安装后可以从命令行运行 'mytool'。
配置自动化 PyPI 发布
创建一个 GitHub Actions 工作流,在创建新版本时构建并将我的 Python 包发布到 PyPI。包含包验证和 TestPyPI 测试步骤。
为 monorepo 设置命名空间包
我需要将公司的代码库拆分为多个共享命名空间的包(company-core、company-api、company-utils)。展示完整的项目结构和 pyproject.toml 配置。

最佳实践

  • 使用 src/ 布局以防止从未安装的源目录意外导入
  • 按照 PEP 621 在 pyproject.toml 中定义所有元数据以实现现代打包
  • 在发布到 PyPI 之前,在干净的虚拟环境中测试包安装

避免

  • 不要将 setup.py 作为主要配置 - 迁移到 pyproject.toml
  • 避免对库使用扁平布局,因为它允许在不安装的情况下导入
  • 永远不要提交 API 令牌或凭证 - 使用环境变量进行 PyPI 身份验证

常见问题

pyproject.toml 和 setup.py 有什么区别?
pyproject.toml 是现代标准(PEP 518/621),在单个文件中声明构建要求和元数据。setup.py 是使用可执行 Python 代码的遗留方法。新项目应该使用 pyproject.toml 与 setuptools 或 hatchling 等构建后端。
我应该先发布到 TestPyPI 再发布到 PyPI 吗?
是的,始终先在 TestPyPI 上测试。它是一个镜像 PyPI 功能的独立索引。将包上传到那里,在干净的环境中安装,验证所有功能正常,然后发布到真正的 PyPI。
如何在我的包中包含数据文件?
在 pyproject.toml 的 [tool.setuptools.package-data] 下使用 package-data 配置。指定模式如 '*.json' 或 'templates/*.html'。对于现代 Python,使用 importlib.resources.files() 在运行时访问文件。
第一次发布应该使用什么版本?
初始版本从 0.1.0 开始,以表明包处于早期开发阶段。使用语义版本控制(MAJOR.MINOR.PATCH)。当你拥有不想破坏的稳定公共 API 时,升级到 1.0.0。
我可以从 git 标签自动为包设置版本吗?
可以在 build-system.requires 中使用 setuptools-scm。在 pyproject.toml 中配置它以从 git 标签读取版本信息。这确保版本与 git 历史匹配并自动管理版本。
如何创建用户可以通过 pip 安装的 CLI 工具?
在 pyproject.toml 的 [project.scripts] 下定义入口点。将命令名称映射到 Python 函数路径,如 'mytool = my_package.cli:main'。安装后,用户可以从终端运行 'mytool'。