发布工具包到pypi

2022-02-17 by 没有评论

实操过程中发现网上资料已经过时,因此决定写一版新文档

编写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