Skip to content

手把手教你发布一个Python包

标签:Python包 pypi

本文主题如下: 编写一个包(Python 源代码),但不是本文的重点。 编译包,观察编译后的文件。 发布包,发布的包可以有多种类型。 如何在 Pypi 中查看已发布的包。 注意: 本文编写的包在 Python2 环境下测试通过,实际上这个包(只是个例子)比较简单,在 Python3 下也能运行。 本文知识点可能陈旧,比如 Python Pypi 官方已做了很大改变。 1. 编写包源代码 这篇文章主要描述如何发布一个包,不描述如何编写一个包,如果你没有代码(只想学习如何发布包),可下载下面的示例。 1 $ wget "https://files.pythonhosted.org/packages/96/66/43e6df87373557553be2b4343db27d008c6dcefa110ccff38cba1459ca07/ywdblogmath-0.1.tar.gz" 可以认为下载的源码就是读者自己编写的,然后在本地测试、生成、发布包。 运行下列命令解压缩,并将代码放到特定目录: 1 2 3 $ tar ywdblogmath-0.1.tar.gz   # 代码在 /root/python 目录下  $ mv setup.py ywdblogmath /root/python 2. 查看 setup.py 为了生成和发布包,必须编写 setup.py 文件,编写该文件必须依赖于 setuptools 包(还记得上一篇文章讲解的 Python 官方包管理工具),这个包本身也是一个 Python 包。 1 2 3 4 5 6 7 8 9 10 #!/usr/bin/env python from setuptools import setup setup(name='ywdblogmath',     version='0.1',     description='A silly ywdblogmath package',     author='ywdblog',     author_email='ywdblog@gmail.com',     url='http://www.yudadan.com/',     packages=['ywdblogmath', 'ywdblogmath.adv'], ) 望文生义,不过多讲解相应的参数。 3. 测试本地包 首先将该代码生成一个本地包,然后编写代码测试该包的功能。 在开发模式下安装包: 1 $ 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 : 1 2 3 4 5 6 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: 1 2 3 4 5 $ python  example.py     9     2     50     6.92820323028 4. 配置 pypi (1)为了发布包,必须在 pypi.org 注册一个用户,注册邮箱需要验证。 (2)配置 $HOME”.pypirc” 文件: 1 2 3 4 5 6 [distutils] index-servers=pypi [pypi] repository = https://upload.pypi.org/legacy/ username = pypi.org 登录名 password = pypi.org 登陆密码 5. 发布包 在发布包之前,运行下列命令了解所有可用的命令: 1 $ python setup.py --help-commands 先编译包: 1 $ python setup.py build 运行完成后生成 /root/python/build 目录,所以编译的文件保存在该目录下。 (1)生成 tar.gz 包 1 $ python setup.py sdist 运行后产生下列文件: /root/python/dist/ywdblogmath-0.1.tar.gz /root/python/ywdblogmath.egg-info (python setup.py egg_info 命令也会生成该文件) (2)生成 egg 包 1 $ 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 包 1 $ python setup.py bdist_wheel 运行后产生下列文件: /root/python/dist/ywdblogmath-0.1-py2-none-any.whl /root/python/ywdblogmath.dist-info 最后发布包(任何一个命令都可以): 1 2 3 4 5 6 # 发布 .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 查看发布的包 在发布包的时候,可能会遇到很多命令行提示的错误,这些内容不是本文的重点,另外注意 setpy.py 中的包版本号,可以测试发布多版本的包。

部分信息收集于网络,若有侵权请联系我们.