资讯专栏INFORMATION COLUMN

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

sunny5541 / 579人阅读

摘要:推荐遵循语义化版本号规则,简单说就像这样作者姓名和邮箱地址不一定要和你的账号一致。上传并完成发布你可以任选以下两种方式之一发布你的轮子。文件已经存在了,你每一次上次都应该更新版本号。

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

https://docs.python.org/2/dis...

上传前的注意事项

假设你的包已经开发完成,并且根目录必须要有一个setup.py。

最好有一个README.rst 用来描述你的轮子,虽然这不是必须的,但文档就像内裤,你最好还是要有的。

如果你需要打包代码文件夹以外的文件,比如版权信息等等,你还需要写一个 MANIFEST.in。

关于setup.py的补充说明

name 必须是唯一的,允许使用数字和字母,推荐使用中划线(-)而不是下划线(_),因为pip安装只支持中划线,比如pip install my-pkg,为了不给自己找麻烦请听话。

version推荐遵循语义化版本号规则,简单说就像这样:1.2.0

作者姓名和邮箱地址不一定要和你的PyPI账号一致。

测试本地打包命令

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

python setup.py sdist
上传并发布包文件到PyPI 创建 PyPI账号

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

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

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

[distutils]
index-servers=pypi

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

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

注册你的包

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

使用命令python setup.py register,最简单但官网不推荐,因为使用的是HTTP未加密,有可能会被攻击人嗅探到你的密码。

通过PyPI网站提交表单完成注册验证。

安装 pip install twine 然后在通过命令 twine register dist/mypkg.whl 完成注册。

上传并完成发布

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

使用命令:python setup.py sdist upload,还是和上面一样,简单但有安全隐患,目前已淘汰

使用 twine: twine upload dist/*

管理你的包

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

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

让别人使用你的包

包发布完成后,其他人只需要使用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

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

参考文档

https://packaging.python.org/...

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

欢迎关注我的博客 https://betacat.online,你可以到我的公众号中去当吃瓜群众。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38501.html

相关文章

  • Python发布自己模块到Pypi

    摘要:学习我们已经感受到他的强大之处,内置模块和强大的第三方模块,省去了我们重复造轮子的过程,谁没有一颗想造轮子的心,今天来发布一个自己的轮子先解释下是官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到。 学习Python我们已经感受到他的强大之处,内置模块和强大的第三方模块,省去了我们重复造轮子的过程,but 谁没有一颗想造轮子的心,今天来发布一个自己的轮子 先解释下PyP...

    zsy888 评论0 收藏0
  • 利用setuptools发布Python程序到PyPI,为Python添砖加瓦

    摘要:众所周知的原因,国内访问国外网站总是不那么顺畅,于是就有了镜像,国内有很多,我用过阿里云的,中科大的,豆瓣的。阿里云的同步的好像不够及时,中科大的好像很及时,所以我就用中科大的。而通过可以指定当个文件作为包。 showImg(https://segmentfault.com/img/bVbsjki?w=742&h=487); pip install的东西从哪里来的? 从PyPI (Py...

    IntMain 评论0 收藏0
  • 如何在Pypi上发表自己Python库

    摘要:准备注册账号很显然地要在上注册一个账号。最终的代码结构打包上传在的同级目录下运行以下命令。大功告成之后我们就可以在里搜索到自己的库了,当然也可以直接通过安装。 背景 最近兴趣使然写了几个Python库,也发布到了Pypi上,虽然没什么人下载,但自己在其他机器上用着也会很方便。这里我向大家介绍一下如何在Pypi上发表自己的Python库。 准备 注册账号 很显然地要在Pypi上注册一个...

    nihao 评论0 收藏0
  • 结合自己轮子实践按需加载

    摘要:原文地址为了探究按需加载的本质,选择了对先前造的轮子进行实验。下文就来揭开面纱,并动手改造项目,最终目标是用第二种写法实现按需加载,减小打包体积。下面给出种可以按需加载的方案。 原文地址 为了探究按需加载的本质,选择了对先前造的轮子 diana 进行实验。 实验一:全量引用 import * as _ from diana 打包体积结果如下: showImg(http://oqhtsc...

    Alfred 评论0 收藏0
  • 10秒钟构建自己”造轮子”工厂! 2019年github/npm工程化协作开发栈最佳实践

    摘要:年工程化协作开发栈最佳实践我们将花半小时实战撸一个包含,的标准的用于工程协作的包开发栈。使用脚手架,秒钟构建可自由配置的开发栈。分别表示询问弹窗自动执行任务执行任务后操作。 发起一个github/npm工程协作项目,门槛太高了!! 最基础的问题,你都要花很久去研究: 如何在项目中全线使用es2017代码? 答案是babel 如何统一所有协作者的代码风格? 答案是eslint + pr...

    dongfangyiyu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<