Python 有非常丰富的第三方库和插件可以使用,最常用的方式安装python的相关插件和库时,我们一般使用“pip install 模块名。很多开发者会把自己写的一些公用方法库或者插件上传至 Pypi ,发布一个属于自己的插件,要想向 Pypi 仓库提交自己开发的包,分为几个步骤。下面详细会描述整个打包分发的过程;
一、setup.py 说明
编写第三方插件,首要是编写 setup.py 文件,有兴趣的可以看下之前下载的一些第三库的源代码文件,目录下面一般都会有setup.py, 在本地可以 python setup.py install 直接安装。setup.py 文件其实就是打包配置文件.描述了一些相关信息,比如是谁发布的,依赖包有哪些,主函数入口描述等配置信息,当然也可以自定义一些 Command 命令.
name : 项目名称
version: (-V) 项目版本号
author : 发布人
author_email: 发布人的邮箱地址
url: 可以放上程序的 GitHub 地址
license: 授权信息
description: 简单描述
long_description: 程序的详细描述,一般直接引用 README.md 文件即可
platforms: 适用的软件平台列表
classifiers: 所属分类列表
keywords: 关键字列表
packages: 需要处理的包目录(包含__init__.py的文件夹),默认find_packages()
cmdclass: 自定义 cmd 命令
data_files: 打包时需要打包的数据文件、图片、配置文件
package_dir : 描述 setuptools 哪些目录下的文件被映射到哪个源码包
install_requires : 需要安装的依赖包
entry_points: 动态发现服务和插件,主函数功能入口。console_scripts 指定了命令行工具的名称。
comet.fms = comet.comet:MainRun , =号前面comet.fms 就是工具包的名称,=号后面comet.comet:MainRun 就是程序的入口地址,当然也可以指定多个,用逗号分隔即可 ;
上面只描述了一些常用的参数,有兴趣的可以去 官方文档 查阅;
二、打包发布Pipy
1. 首先去 Pipy 仓库 注册账号用于代码上传,详细的注册过程,这里就不描述了。
2. 注册包信息,对应项目的根目录下面执行以下命令
python setup.py register
输入刚才注册的账号密码信息,然后注册该包.Pipy上面就有一个仓库.可以存放不同版本的comet.fms
3. setuptools、wheel 安装至最新:
python -m pip install --user --upgrade setuptools wheel
4. 安装twine 至最新版本:
python -m pip install --user --upgrade twine
5. 生成源文件:此命令应输出大量文本,完成后应在dist目录中生成两个文件
python setup.py sdist bdist_wheel
官网说:该tar.gz文件是源归档,而该.whl文件是 内置发行版。较新的pip版本优先安装内置发行版,但如果需要,将回落到源归档文件中。您应该始终上传源档案,并为项目兼容的平台提供内置档案。在这种情况下,我们的示例包在任何平台上都与Python兼容,因此仅需要一个内置发行版。
6. 上传源文件、whl至PyPi:
python -m twine upload dist/*
看到上面的显示,那么就是上传成功了。下面去看下 Pipy 仓库是否有代码存在了。
四、问题总结
但是过程中一般可能会遇到一些常用问题,以下解决方法来自网络各种 博客 和自身实践,如果以下问题并不能解决问题,请直接复制 response 报错信息百度,肯定有解决方案。
1. Upload failed (403): Invalid or non-existent authentication information.
缺少 ~/.pypirc 文件, 参考一下官网
2.Upload failed (403): You are not allowed to edit 'xxx' package information
运行注册命令:python setup.py register,之后再进行上传
3.Server response (401): Incomplete registration; check your email
检查下邮件
4.Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"
setup.py文件中的classifier信息有误,参考一下官网的分类
5.classifier.error: No dist file created in earlier command
确认下是否还没生成源文件就开始上传了。
6.error: Upload failed (499): Client Disconnected
排查下是否是网络问题,重试几次。
7. Upload failed (400): File already exists
版本号重复,每次上传之前记得更新版本号。
以上内容均来自网络和本人学习过程总结,如有问题可以给我留言。
网友评论