37

手把手教你发布一个 Python 包

 5 years ago
source link: https://mp.weixin.qq.com/s/U5-fkTg26xkkeYssJXMDqg?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前文 《在python中安装包的几种方法》 学习了安装第三方包的各种方法,是不是很想自己发布一个包到 Pypi 中?如果自己的成果能够让更多人使用,那是多么让人高兴,这篇文章介绍发布包的方法。

本文主题如下:

  • 编写一个包(Python 源代码),但不是本文的重点。

  • 编译包,观察编译后的文件。

  • 发布包,发布的包可以有多种类型。

  • 如何在 Pypi 中查看已发布的包。

再一次申明:

  • 本文编写的包在 Python2 环境下测试通过,实际上这个包(只是个例子)比较简单,在 Python3 下也能运行。

  • 本文知识点可能陈旧,比如 Python Pypi 官方已做了很大改变。

1:编写包源代码

这篇文章主要描述如何发布一个包,不描述如何编写一个包,如果你没有代码(只想学习如何发布包),可下载下面的示例。

$ wget "https://files.pythonhosted.org/packages/96/66/43e6df87373557553be2b4343db27d008c6dcefa110ccff38cba1459ca07/ywdblogmath-0.1.tar.gz"

可以认为下载的源码就是读者自己编写的,然后在本地测试、生成、发布包。

运行下列命令解压缩,并将代码放到特定目录:

$ tar ywdblogmath-0.1.tar.gz  

# 代码在 /root/python 目录下 
$ mv setup.py ywdblogmath /root/python

2:查看 setup.py

为了生成和发布包,必须编写 setup.py 文件,编写该文件必须依赖于 setuptools 包(还记得上一篇文章讲解的 Python 官方包管理工具),这个包本身也是一个 Python 包。

#!/usr/bin/env python

from setuptools import setup
setup(name='ywdblogmath',
    version='0.1',
    description='A silly ywdblogmath package',
    author='ywdblog',
    author_email='[email protected]',
    url='http://www.yudadan.com/',
    packages=['ywdblogmath', 'ywdblogmath.adv'],
)

望文生义,不过多讲解相应的参数。

3:测试本地包

首先将该代码生成一个本地包,然后编写代码测试该包的功能。

在开发模式下安装包:

$ python setup.py develop

观察安装后生成的文件:

  • /usr/local/lib/python2.7/dist-packages/ywdblogmath.egg-link

  • /usr/local/lib/python2.7/dist-packages/easy-install.pth

这二个文件包含的内容就是 /root/python(一个软连接)。

编写测试文件 example.py :

import sys
import ywdblogmath

print(ywdblogmath.add(4,5))
print(ywdblogmath.division(4, 2))
print(ywdblogmath.multiply(10, 5))
print(ywdblogmath.squareroot(48))

然后运行 example.py:

$ python  example.py

    9
    2
    50
    6.92820323028

4:配置 pypi

(1)为了发布包,必须在 pypi.org 注册一个用户,注册邮箱需要验证。

(2)配置 $HOME”.pypirc” 文件:

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = pypi.org 登录名
password = pypi.org 登陆密码

5:发布包

在发布包之前,运行下列命令了解所有可用的命令:

$ python setup.py --help-commands

先编译包:

$ python setup.py build

运行完成后生成 /root/python/build 目录,所以编译的文件保存在该目录下。

(1)生成 tar.gz 包

$ python setup.py sdist

运行后产生下列文件:

  • /root/python/dist/ywdblogmath-0.1.tar.gz

  • /root/python/ywdblogmath.egg-info (python setup.py egg_info 命令也会生成该文件)

(2)生成 egg 包

$ python setup.py bdist_egg

运行后产生下列文件:

  • /root/python/dist/ywdblogmath-0.1-py2.7.egg

  • /root/python/ywdblogmath.egg-info (python setup.py egg_info 命令也会生成该文件)

(3)生成 wheel 包

$ python setup.py bdist_wheel

运行后产生下列文件:

  • /root/python/dist/ywdblogmath-0.1-py2-none-any.whl

  • /root/python/ywdblogmath.dist-info

最后发布包(任何一个命令都可以):

# 发布 .tar.gz 包
$ python setup.py sdist upload 

# 发布 egg 包
$ python setup.py bdist_egg upload 

# 发布 wheel 包
$ python setup.py bdist_wheel upload

至于发布什么类型的包,读者自己决定,如果想让所有的包安装工具(比如 pip、easy_install )都能安装你发布的包,可同时发布这三种类型的包。

登录 pypi.org 查看发布的包,如图(包版本号忽略):

fqquyyb.jpg!web

在发布包的时候,可能会遇到很多命令行提示的错误,这些内容不是本文的重点,另外注意 setpy.py 中的包版本号,可以测试发布多版本的包。

欢迎大家购买我的新书 《深入浅出HTTPS:从原理到实战》 ,反响还不错。

fIfeEji.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK