全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-19 7 分钟 ✍️ juanwangdev

Python包发布与分发

将 Python 包发布到 PyPI,需理解包格式、构建流程与发布规范。

PyPI 发布流程

1. 注册账号

访问 https://pypi.org 注册账号,获取 API Token 用于认证。

2. 配置认证

Bash
# 创建 ~/.pypirc
[pypi]
username = __token__
password = pypi-xxx...  # API Token

3. 构建与上传

Bash
# 安装构建工具
pip install build twine

# 构建分发包
python -m build

# 上传到 PyPI
twine upload dist/*

测试发布可使用 https://test.pypi.org,避免污染正式仓库。

包格式对比

wheel(二进制分发)

text
my_package-1.0.0-py3-none-any.whl

特点:

  • 预编译格式,安装速度快
  • 不需要本地编译环境
  • 跨平台支持(通过标签区分)

命名规则:

text
{distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl

sdist(源码分发)

text
my_package-1.0.0.tar.gz

特点:

  • 包含完整源码
  • 需要本地编译
  • 适合纯 Python 包

建议同时发布 wheel 和 sdist,pip 会优先选择 wheel。

setup.py 配置

基础配置

Python
from setuptools import setup, find_packages

setup(
    name="my_package",
    version="1.0.0",
    author="作者名",
    author_email="email@example.com",
    description="包的简短描述",
    long_description=open("README.md").read(),
    long_description_content_type="text/markdown",
    url="https://github.com/user/my_package",
    packages=find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires=">=3.8",
    install_requires=[
        "requests>=2.25.0",
    ],
)

包含非代码文件

Python
setup(
    # ...
    package_data={
        "my_package": ["data/*.json", "templates/*.html"],
    },
    include_package_data=True,
)

pyproject.toml 配置(推荐)

使用 setuptools

toml
[build-system]
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "my_package"
version = "1.0.0"
description = "包的简短描述"
authors = [{name = "作者名", email = "email@example.com"}]
requires-python = ">=3.8"
dependencies = [
    "requests>=2.25.0",
]

[project.urls]
Homepage = "https://github.com/user/my_package"

使用 poetry

toml
[tool.poetry]
name = "my_package"
version = "1.0.0"
description = "包的简短描述"
authors = ["作者名 <email@example.com>"]

[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.25.0"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

版本号规范

遵循语义化版本:MAJOR.MINOR.PATCH

text
1.0.0 -> 1.0.1  # PATCH: 修复bug
1.0.0 -> 1.1.0  # MINOR: 新功能,向后兼容
1.0.0 -> 2.0.0  # MAJOR: 不兼容的修改

预发布版本:1.0.0a1(alpha)、1.0.0b1(beta)、1.0.0rc1(release candidate)

要点总结

  1. wheel 是预编译二进制包,安装快,优先发布
  2. sdist 是源码包,适合纯 Python 项目
  3. 建议使用 pyproject.toml 替代 setup.py
  4. 版本号遵循语义化版本规范
  5. 发布前使用 twine check 检查包格式

📝 发现内容有误?点击此处直接编辑

← 上一篇 Python依赖管理工具
下一篇 → Python Web框架设计模式
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库