JiFu's Wiki JiFu's Wiki
首页
  • HTML
  • JavaScript
  • NodeJS
  • Vuejs
  • 微信小程序
  • Python
  • 数据库
  • 中间件
  • 算法
  • 软件工程
  • Wordpress
  • iOS开发
  • Android开发
  • Linux
  • Windows
  • MacOS
  • Docker
  • Vim
  • VSCode
  • Office
  • 其他
  • Photoshop
  • Sketch
  • Mac
  • 游戏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
首页
  • HTML
  • JavaScript
  • NodeJS
  • Vuejs
  • 微信小程序
  • Python
  • 数据库
  • 中间件
  • 算法
  • 软件工程
  • Wordpress
  • iOS开发
  • Android开发
  • Linux
  • Windows
  • MacOS
  • Docker
  • Vim
  • VSCode
  • Office
  • 其他
  • Photoshop
  • Sketch
  • Mac
  • 游戏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据库

  • Python

    • Python介绍
    • 国内pip更换豆瓣的pypi源
    • sys.stdout.write实现Python控制台实时刷新打印
    • 发布你自己的轮子 - PyPI打包上传实践
      • 创建 PyPI账号
      • 创建用户验证文件 ~/.pypirc
      • 注册你的包
      • 上传并完成发布
      • 管理你的包
      • 让别人使用你的包
      • 可能遇到的错误
    • Seaborn库绘制了17个超好看图表
    • Python脚本打包exe Auto-py-to-exe
    • Build-in

    • Flask

    • Libaray

  • 中间件

  • 算法

  • 软件工程

  • Wordpress

  • 后端技术
  • Python
JiFu
2023-10-18
目录

发布你自己的轮子 - PyPI打包上传实践

本文仅讨论上传相关的步骤,关于如何给写一个setup.py 请参阅官方文档:

https://docs.python.org/2/dis... (opens new window)

# 上传前的注意事项

假设你的包已经开发完成,并且根目录必须要有一个setup.py (opens new window)。 最好有一个README.rst (opens new window)用来描述你的轮子,虽然这不是必须的,但文档就像内裤,你最好还是要有的。 如果你需要打包代码文件夹以外的文件,比如版权信息等等,你还需要写一个 MANIFEST.in (opens new window)。

# 关于setup.py的补充说明

  • name必须是唯一的,允许使用数字和字母,推荐使用中划线(-)而不是下划线(_),因为pip安装只支持中划线,比如pip install my-pkg,为了不给自己找麻烦请听话。
  • version推荐遵循语义化版本号 (opens new window)规则,简单说就像这样:1.2.0
  • 作者姓名和邮箱地址不一定要和你的PyPI账号一致。

# 测试本地打包命令

如果上面的都没问题,在本地目录执行以下命令应该能成功在dist目录下生成*.tar.gz的包文件。

python setup.py sdist
1

# 上传并发布包文件到PyPI

# 创建 PyPI账号

非常简单,直接通过官网注册https://pypi.python.org/pypi?... (opens new window), 但是需要验证邮件并确认激活。

# 创建用户验证文件 ~/.pypirc

在自己的用户目录下新建一个空白文件命名为.pypirc,内容如下:

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>
1
2
3
4
5
6
7

用户名和密码就是上一步骤所创建的,直接明文输入。如果你觉得明文密码不安全也可以留空,在后面的上传过程中会提示你手动输入。

# 注册你的包

你需要到PyPI注册并验证你的包,之后才能开始真正上传,注册的方式有以下几种。

  1. 使用命令python setup.py register,最简单但官网不推荐,因为使用的是HTTP未加密,有可能会被攻击人嗅探到你的密码。
  2. 通过PyPI网站提交表单 (opens new window)完成注册验证。
  3. 安装pip install twine然后在通过命令twine register dist/mypkg.whl完成注册。

# 上传并完成发布

你可以任选以下两种方式之一发布你的轮子。

  1. 使用命令: python setup.py sdist upload,还是和上面一样,简单但有安全隐患,目前已淘汰。
  2. 使用twine (opens new window): twine upload dist/*

# 管理你的包

如果你的包已经上传成功,那么当你登录PyPI网站后应该能在右侧导航栏看到管理入口。

点击包名进去后你可以对你的包进行管理,当然你也可以从这里删除这个包。

# 让别人使用你的包

包发布完成后,其他人只需要使用pip就可以安装你的包文件。比如:

pip install package-name
1

如果你更新了包,别人可以可以通过--update参数来更新:

pip install package-name --update
1

# 可能遇到的错误

# Upload failed (403): Invalid or non-existent authentication information

错误的用户验证信息,你需要创建一个用户验证文件~/.pypirc。请参阅上文。

# Upload failed (403): You are not allowed to edit 'xxx' package information

你需要先注册你的包才可以开始上传,运行注册命令:python setup.py register

# Server response (401): Incomplete registration; check your email

你的PyPI账户还没完成邮箱验证,你需要去注册邮箱找到一封验证邮件完成验证后再重试失败的步骤。

# Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"

你的setup.py文件中的classifier信息有误,请按官网 (opens new window)的正确分类书写classifier.

# error: No dist file created in earlier command

你还没打包就开始了上传命令,建议打包和上传的操作放在一起做,比如:

python setup sdist upload
1

# error: Upload failed (499): Client Disconnected

这应该是网络问题,多重试几次。

# Upload failed (400): File already exists

文件已经存在了,你每一次上次都应该更新版本号。

上次更新: 2024/08/11, 01:59:03
sys.stdout.write实现Python控制台实时刷新打印
Seaborn库绘制了17个超好看图表

← sys.stdout.write实现Python控制台实时刷新打印 Seaborn库绘制了17个超好看图表→

最近更新
01
Disable notification "to get future google chrome updates you'll need macos 10.13 or later" on mac
05-14
02
MacOS软件推荐
04-30
03
Debian Sway开发机安装手册
03-26
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Ji Fu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式