如何将Python 包发布到PyPI上

1. PyPi 的用途

Python 中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从 Pypi.org 里面下载。

PyPI 是 Python Package Index 的首字母简写,其实表示的是 Python 的 Packag 索引,这个也是 Python 的官方索引。

需要先再本地环境安装 pip,然后如果要安装其他工具包的话就使用指令:

pip install <package name>

2.Python 包发布步骤

2.1 创建目录结构

创建一个测试项目,例如s22rgb,在该项目下,创建一个待发布的包目录,例如:s22rgb,并在该project_demo目录下,依次创建:setup.py、README.rst几项文件,此时目录结构为:

➜ project_demo tree.

├── README.rst

├── package_mikezhou_talk

│ └── init.py

└── setup.py

2.2 准备文件

1、README.rst
是关于项目的描述文件,一般包含怎样安装项目,怎样使用项目等。markdown 语法可以参考 https://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html

打开 README.rst 并输入以下内容。可以自定义此项,放入一些对项目的介绍。

2、setup.py 文件

setup.py 是 setuptools 的构建脚本,用来描述项目,打包的时候会用到这个文件。它告诉 PyPI 我们的项目叫什么名字,是什么版本,依赖哪些库,支持哪些操作系统,可以在哪些版本的 Python 上运行,等等。

示例:

#!/usr/bin/env python

# coding: utf-8

from setuptools import setup
with open("README.rst", "r") as f:
  long_description = f.read()
setup(
    name='s22rgb',
    version='0.0.0.2',
    long_description=long_description,
    author='ytkz',
    author_email='ytkz11@163.com',
    url='https://github.com/ytkz11/s22rgb',
    description=u'Sentinel 2 to three bands rgb jpg',
    packages=['s22rgb'],
    install_requires=[],
    platforms=["all"],
    license='BSD License')

2.3 编写核心代码

接下来我们就可以编写自己的代码了,要注意源代码文件夹(仓库里的package_mikezhou_talk包目录)的名字与 setup.py 里配置的包名(Name)要一致。

2.4 生成分发档案

下一步是为包生成分发包。这些是上传到包索引的档案,可以通过 pip 安装。

确保您拥有 setuptools 并 wheel 安装了最新版本:

python3 -m pip install --user --upgrade setuptools wheel

生成这前,可以先运行python setup.py check检查 setup.py 是否有错误,如果没报错误,则进行下一步输出一般是 running check。

1、准备好上面的步骤, 一个包就基本完整了, 剩下的就是打包了,可以使用下面命令打包一个源代码的包:

python setup.py sdist build

这样在当前目录的 dist 文件夹下, 就会多出一个 tar.gz 结尾的包

2、也可以打包一个 wheels 格式的包, 使用下面的命令就可以了:

python setup.py bdist_wheel --universal

这样会在 dist 文件夹下面生成一个 whl 文件.

2.5 发布包到 PyPi

1、接下来就是去https://pypi.org/account/register/注册账号,如果有账号的请忽略,记住你的账号和密码,后面上传包会使用。密码1到4_pypi

2、接下来就是上传你的包了,这里使用 twine 上传。
需要先安装 twine(用 twine 上传分发包,并且只有 twine> = 1.11.0 才能将元数据正确发送到 Pypi 上)

pip install twine

3、安装完之后,运行下面的命令将库上传,上传包,期间会让你输入注册的用户名和密码

twine upload dist/*

输入 PyPI 注册的用户名和密码。命令完成后,您应该看到与此类似的输出:

hqmLZT.png

上传完成后,我们的项目就成功地发布到 PyPI 了。

每次上传记得修改setup.py中的版本号

win10安装s22rgb

pip install s22rgb -i https://pypi.python.org/simple