发布工具包到pypi
2022-02-17
没有评论
实操过程中发现网上资料已经过时,因此决定写一版新文档
编写setup.py
首先需要在项目根目录编写一个setup.py,主要完成打包的配置
from setuptools import setup, find_packages
setup(
name='foobar',
version='0.0.1',
author='name',
author_email='foo@bar.com',
url='https://gitee.com/domain/project',
package_dir={
'foo': 'foo',
'foo.bar': 'foo/bar',
'foo.utils': 'foo/utils',
'foo.bar.user': 'foo/bar/user'
},
packages=['foo','foo.bar','foo.utils','foo.bar.user'],
description=u'description',
install_requires=['mysql-connector']
)
参数说明
- name: 项目名称,注意不要和pypi中的已有项目重名,否则无法提交
- version: 版本号
- author: 作者名
- author_email: 作者email
- url: 通常是项目github首页或者文档页地址
- package_dir: 定义打包时需要上传的文件目录
- packages: 包含的包列表,通常是使用package_dir的key列表。注意setuptools提供了一个find_packages工具函数,可以省略package_dir定义,直接使用
packages=find_packages()
即可。find_packages还有一些额外参数可以精细化指定需要包含的package - description: 写一个简短的描述
- install_requires: 指定这个包外部依赖的pypi库,pip install的时候会自动安装
验证setup.py
python setup.py check
执行后只打印了running check,如果没有其他输出表示验证通过
编写README
发布到pypi要求根目录必须包含一个README文件,具体可以是README, README.rst, README.txt, README.md
文件内容会显示在pypi项目首页,通常是一个quick start引导
注册pypi账号
如果已有账号可以跳过
访问https://pypi.org/account/register/
完成注册流程
打包和上传
老文档会用python setup.py register
,但这个方法现在会返回以下错误
Server response (410): Project pre-registration is no longer required or supported, upload your files instead.
新的方法改成了两步
打包
python setup.py sdist
会生成一个dist目录,包含了打包好的tar.gz文件,以及一个项目的egg-info目录,可以检查一下SOURCES.txt文件看一下是否包含了所有项目文件
上传
pip install twine
twine upload dist/*.tar.gz
上传时会要求填写pypi用户名和密码
如果dist包含多个版本的文件注意清理,或者在上传时指定具体文件
上传成功后就可以从官方pypi源执行pip install安装了,如果使用的是例如清华、阿里云的加速源,可能需要等待2-3天等待目录更新。如果想看效果可以手动指定官方源进行安装
pip install -i https://pypi.org/simple foobar