有勇气的牛排博客

pyhton开发与发布依赖包到pypi

有勇气的牛排 821 Python 2023-03-16 00:03:18

进群口令:博客

前言

在 Python 项目开发完成后,如果希望让其他人能够方便地通过 pip install your-package 的方式安装和使用,就需要将项目打包并发布到 PyPI(Python Package Index)。本文将介绍从环境准备到上传发布的完整流程。

1. 前期准备

1.1 注册 PyPI 账号

1.2 配置认证信息

在用户根目录下创建配置文件 $HOME/.pypirc(Windows 下为 C:\Users\<用户名>\.pypirc):

[distutils]
index-servers=
    pypi
    testpypi

[pypi]
repository: https://upload.pypi.org/legacy/
username: 你的用户名
password: 你的密码

[testpypi]
repository: https://test.pypi.org/legacy/
username: 你的用户名
password: 你的密码

⚠️ 建议使用 PyPI Token 代替密码,更安全。可在 PyPI 后台生成 pypi-xxxxxxxx 格式的 Token。

2. 本地开发与测试

在项目根目录下通常包含 setup.pypyproject.toml(推荐新项目使用 pyproject.toml)。

2.1 本地安装测试

python setup.py develop

这样可以在本地以“开发模式”安装,修改代码后立即生效,方便调试。

3. 构建发布文件

3.1 生成源代码压缩包(tar.gz)

python setup.py sdist

生成的文件会保存在 dist/ 目录下。

3.2 生成二进制包(.whl)

pip install wheel python setup.py bdist_wheel

Wheel 格式安装速度更快,推荐一并生成。


4. 上传前检查

4.1 基础检查

python setup.py check

4.2 使用 twine 检查包

pip install twine twine check dist/*

5. 上传到 PyPI

5.1 上传到测试环境

twine upload --repository testpypi dist/*

安装测试包:

pip install -i https://test.pypi.org/simple/ your-package

5.2 上传到正式环境

确认无误后执行:

twine upload dist/*

上传完成后,其他用户即可通过:

pip install your-package

来安装。

6. 常见问题

  1. 上传失败:401 Unauthorized
    • 检查 .pypirc 配置是否正确
    • 建议使用 Token 替代密码
  2. 包名已存在
    • PyPI 上的包名是唯一的,需要更换包名或添加后缀。
  3. 版本号冲突
    • PyPI 不允许覆盖已发布的版本。修改 setup.pypyproject.toml 中的 version 后重新上传。

7. 最佳实践建议

  • 使用 pyproject.toml 代替 setup.py,符合 [PEP 517/518] 标准。
  • 优先生成 wheel 包,提高安装速度。
  • 在上传前,先发布到 TestPyPI 进行验证。
  • 使用 GitHub Actions / GitLab CI 等 CI 工具,自动化构建和上传。

评论区

×
×