发布你本身的轮子 - PyPI打包上传实践

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

上传前的注意事项

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

关于setup.py的补充说明

  • name 必须是惟一的,容许使用数字和字母,推荐使用中划线(-)而不是下划线(_),由于pip安装只支持中划线,好比pip install my-pkg,为了避免给本身找麻烦请听话。
  • version推荐遵循语义化版本号规则,简单说就像这样:1.2.0
  • 做者姓名和邮箱地址不必定要和你的PyPI帐号一致。

测试本地打包命令

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

python setup.py sdist

上传并发布包文件到PyPI

建立 PyPI帐号

很是简单,直接经过官网注册 https://pypi.python.org/pypi?..., 可是须要验证邮件并确认激活。git

建立用户验证文件 ~/.pypirc

在本身的用户目录下新建一个空白文件命名为.pypirc,内容以下:github

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>

用户名和密码就是上一步骤所建立的,直接明文输入。若是你以为明文密码不安全也能够留空,在后面的上传过程当中会提示你手动输入。shell

注册你的包

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

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

上传并完成发布

你能够任选如下两种方式之一发布你的轮子。网络

  1. 使用命令:python setup.py sdist upload,仍是和上面同样,简单但有安全隐患,目前已淘汰
  2. 使用 twinetwine upload dist/*

管理你的包

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

pypi_manage

点击包名进去后你能够对你的包进行管理,固然你也能够从这里删除这个包。测试

让别人使用你的包

包发布完成后,其余人只须要使用pip就能够安装你的包文件。好比:网站

pip install package-name

若是你更新了包,别人能够能够经过--update参数来更新:

pip install package-name --update

可能遇到的错误

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信息有误,请按官网的正确分类书写classifier.

error: No dist file created in earlier command

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

python setup sdist upload

error: Upload failed (499): Client Disconnected

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

Upload failed (400): File already exists

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

参考文档

关于做者:Python技术爱好者,目前从事测试开发相关工做,转载请注明原文出处。

欢迎关注个人博客 https://betacat.online,你能够到个人公众号中去当吃瓜群众。

Betacat.online

相关文章
相关标签/搜索