手把手教你釋出一個Python包

pythontab發表於2018-08-07

本文主題如下:

編寫一個包(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='ywdblog@gmail.com',
    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 檢視釋出的包

在釋出包的時候,可能會遇到很多命令列提示的錯誤,這些內容不是本文的重點,另外注意 setpy.py 中的包版本號,可以測試釋出多版本的包。


相關文章