如何將自己的程序發布到 PyPI

這段是廢話

P.S. 這是一篇非常基礎的文章,如果你有相關基礎,請不必浪費時間閱讀。寫這篇文章的初衷是收到知友私信問到了怎麼講自己寫的程序發布到 PyPI,與其回復一個人的私信,不如寫出來供所有初學的人參考參考。

PyPI 的全稱是「Python Package Index」,官方介紹如是說:

The Python Package Index is a repository of software for the Python programming language. There are currently 102159 packages here.

託管到 PyPI 的倉庫,可以方便地通過 easy_install 或 pip 來安裝和更新。比如,你直接「 pip install tornado 」就可以方便地安裝 tornado 了。

概念性的東西,就一筆帶過吧。這篇博客中,我將以發布一個名為「jujube_pill」的包到 PyPI 為例,從頭到尾講解如何將自己的程序發布到 PyPI。

代碼結構

這裡的示例代碼結構非常簡單,就一個 setup 文件和一個源碼文件,結構如下:

jujube-pill $ treen.n├── jujube_pilln│ └── __init__.pyn└── setup.pyn

其中 setup.py 如下:

#!/usr/bin/env pythonn# coding: utf-8nnfrom setuptools import setupnnsetup(n name=jujube_pill,n version=0.0.1,n author=xlzd,n author_email=what@the.f*ck,n url=https://zhuanlan.zhihu.com/p/26159930,n description=u吃棗藥丸,n packages=[jujube_pill],n install_requires=[],n entry_points={n console_scripts: [n jujube=jujube_pill:jujube,n pill=jujube_pill:pilln ]n }n)n

很多參數都見名之意,所以這裡不贅述每個參數的含義。另外有一些參數對於初學者暫時用不上,也暫不表。 install_requires 是這個庫所依賴的其它庫,當別人使用 pip 等工具安裝你的包時,會自動安裝你所依賴的包。console_scripts 是這個包所提供的終端命令,比如我希望在安裝這個包後可以使用「 jujube 」和「 pill 」兩個命令,則按照 setup 文件的寫法,當我在終端輸入「 jujube 」的時候,將會執行 jujube_pill 包下(__init__ 中)的 jujube 函數。

__init__.py 文件如下:

#!/usr/bin/env pythonn# encoding=utf-8nnndef jujube():n print u吃棗n nndef pill():n print u藥丸n

上傳代碼到 PyPI

在上傳之前,可以先通過命令校驗 setup 寫錯了沒有:

$ python setup.py checknrunning checkn$ n

如果沒有輸出任何錯誤,則說明格式正確。

然後需要在這裡註冊一個 PyPI 的帳號,註冊完成之後,就可以將這個代碼庫註冊到 PyPI 了:

$ python setup.py registernnrunning registern......nnWe need to know who you are, so please choose either:n 1. use your existing login,n 2. register as a new user,n 3. have the server generate a new password for you (and email it to you), orn 4. quitnYour selection [default 1]: n1nUsername: xlzdnPassword: nRegistering jujube_pill to https://pypi.python.org/pypinServer response (200): OKnI can store your PyPI login so future submissions will be faster.n(the login will be stored in /Users/xlzd/.pypirc)nSave your login (y/N)?yn

中間一些步驟的輸出被我省略了,其中是第一次上傳代碼到 PyPI,則需要先登錄帳號。如果剛才沒有在網頁端註冊帳號,在這裡註冊也是 OK 的。填好用戶名密碼之後,就可以登錄了。登錄成功後會提示你是否保存登錄信息,如果選擇了 y,則會在 home 目錄下生成一個 .pypirc 文件存儲你的 PyPI 帳號登錄信息。

接著的操作是打包代碼,使用如下命令:

$ python setup.py <打包格式>n

打包格式一般使用「 sdist 」或者「 bdist_egg 」,使用前者居多(sdist 支持 pip 安裝,bdist_egg 支持 easy_install 安裝)。

打好包之後,通過如下命令上傳:

$ python setup.py uploadn

最後去 PyPI 上看下我們剛剛上傳的庫( jujube_pill ):

其實,剛才的命令也可以合成一條一次執行:

python setup.py register sdist uploadn

試試看我們自己發布的庫

$ pip install jujube_pilln

安裝完成後,就可以愉快地使用這兩個命令了:

$ jujuben吃棗n$ pilln藥丸n

或者在代碼中使用我們剛剛上傳的庫:

In [1]: import jujube_pillnnIn [2]: jujube_pill.jujube()n吃棗nnIn [3]: jujube_pill.pill()n藥丸n

妥了。

最後

由於一些不可描述的原因,我需要 4 個超過 100star 的 GitHub 倉庫。所以,如果我的博客對你有幫助,麻煩幫我給下面的 GitHub 倉庫點一個 star 吧。謝謝各位~

  • xlzd/img2html

  • xlzd/xart

  • xlzd/xtls

  • xlzd/xPyToys

推薦閱讀:

TAG:Python | pypi | Python教程 |