如何发布自己的包到 pypi ?

使用 pip 安装自己写的 Python 程序,想想就很酷对不对?!

除了很酷之外,其他程序员也能安装你的包,快速的处理一些事情。这就相当于你把自己的工作分享出来,四舍五入等于造福了全人类啊!

如果同时你把代码开源在 Github 上,别人在使用后也许会给你一些反馈,还有一部分人可能直接帮你把 BUG 改了,这样对你的好处也是极大的!

1 PyPI 简介

我们经常使用 pip 安装或者更新一些包,那这些包是保存在哪里的呢?
如果是一个服务器,我们是不是把自己的包丢到这个服务器里,然后就可以使用 pip 安装了呢?
没错!大致的原理就是如此,而这个服务器叫 pypi.org
先来看下网站是如何介绍自己的:

The Python Package Index (PyPI) is a repository of software for the python programming language.

翻译一下:PyPI 是 Python 编程语言的软件存储库。
接下来我们一起把自己的程序(包)example_pkg托管到 PyPI,从而实现便捷的安装和更新。

2 快速上手

1 编写 setup.py

你需要在上传的目录/example_pkg下面建立一个名为setup.py的文件,它是构建工具setuptools的构建脚本,里面主要是一些配置信息,需要你提供包的名称、版本以及包含的代码等等。

1
2
3
4
5
6
/example_pkg
/example_pkg
__init__.py
setup.py
LICENSE
README.md

下面👇是一个样例,你可以根据实际情况去修改它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import setuptools

# 读取 README.md 得到详细介绍
with open("README.md", "r") as fh:
long_description = fh.read()

setuptools.setup(
name="example_pkg", # 名称
version="0.0.1", # 版本
author="Example Author", # 作者
author_email="author@example.com", # 邮箱
description="A small example package", # 简介
long_description=long_description, # 详细介绍
long_description_content_type="text/markdown", # 详细介绍的文件类型
url="https://github.com/pypa/sampleproject", # 包的链接
packages=setuptools.find_packages(),
classifiers=(
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
),
)

long_description 是在关于你项目的介绍,所以你最好创建一个 README.md 文件,然后使用 Markdown 语言编写介绍。

2 检查文件

/example_pkg目录下,输入下面👇命令进行检查:

1
2
python setup.py check
# running check

如果输出任何异常信息,那么说明 setup.py 和上传的包没有问题。

3 注册账户

/example_pkg目录下,输入下面👇命令注册包:

1
python setup.py register

如果你先前没有账号,可以选择去 pypi.org 注册一个,或者直接在命令行里进行注册。

1
2
3
4
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
  • 输入 1 使用已有账户;
  • 输入 2 直接进行注册;
  • 输入 3 通过邮件重制密码;
  • 输入 4 退出。

当你输入账号密码后,会在$HOME目录下面生成.pypirc配置文件,里面存储着仓库链接、账号密码等。下次使用时它会自动读取配置文件,省去写入了账号密码的步骤。

下面👇是我的.pypirc配置(隐去了密码):

1
2
3
4
5
6
7
[distutils]
index-servers=pypi

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

4 打包文件

/example_pkg目录下,输入下面👇进行打包:

1
2
3
4
# 支持 pip 安装的打包方式
python setup.py sdist
# 支持 easy_install 安装的打包方式
python setup.py bdist_egg

推荐使用第1种可以支持 pip 安装的打包方式,比较常用。

5 上传文件

/example_pkg目录下,输入下面👇进行上传:

1
python setup.py upload

6 查看

pypi.org 上搜索你的项目名,看到自己的包是不是有些欣喜😄呢!

7 安装

如何安装自己的上传的包呢?这就很简单啦!

1
pip install $your_package

⚠️ 注意!这里可能会遇到一个错误:

1
Could not find a version that satisfies the requirement cnnlp (from versions: )

这个问题可能是以下两种情况造成的:

第一种是我们的包刚刚上传,由于网络延时等各种原因,暂时无法找到包。这种情况的解决方法很简单,就是等一会儿再安装。

还有一种情况是 pip 的安装源被修改了。比如替换成了清华源豆瓣源等等,这些第三方源一段时间才会同步一次所有的包,所以暂时无法找到你刚上传的包。解决方法是在安装时指定成默认的pypi源

1
pip install $your_package -i https://pypi.org/simple

对于包文件,我们还有另外一种方法安装,直接通过源文件安装

比如你可以直接在 PyPI 的项目介绍里找到给出 Github 仓库地址,然后克隆代码。在代码的主目录下直接运行下面的命令进行安装:

1
python setup.py install

如果能顺利安装,那么恭喜你🎉

3 使用模版

利用模版可以快速的生成一个 Python Package 所需要的所有文件,我根据常用的功能制作了 Python-package-template,现在已经开源在了 GitHub 上,点击这里直达。

4 参考链接

如何发布自己的包到 pypi ?

https://blog.ailln.com/v2ai/2018/07/30/python/1-pypi/

作者

Ailln

发布于

2018-07-30

更新于

2024-03-02

许可协议

评论