把Github用作Pypi Server

語言: CN / TW / HK

因為覺得有參考價值,一直開啟許多頁面沒有關閉,瀏覽器的 tab 都差不多上百了,決心把一些有意義的內容通過翻譯、摘錄和重編的形式把核心內容快速統一到部落格上來,方便後續檢索,也好關掉一些瀏覽器視窗。

本文是 How to use GitHub as a PyPi server 的翻譯、摘錄和重編,原作者 cedd burge ,我加入了一些 pip 配置和網頁原始碼之類的內容,讓它更加順暢和完整。

首先是有很多私有 Pypi Server 方案,但需要自己架設,cedd哥不想幹這事,只想白嫖,最後他成功了,本文就是他的方案。

首先, pip 是可以從 Git 裡安裝程式包的,比如cedd哥在github託管了一個 python_world 的專案,這個專案的程式碼結構是符合Python包規範的,那麼就可以通過以下命令把這個包安裝到電腦:

pip install git+https://github.com/ceddlyburge/python_world#egg=python_world

因為這個專案是開源(公開)的,誰都可以讀取,所以這個沒有問題。

除此之外, setuptools 也可以從 git 安裝 setup.py 裡宣告的依賴包,比如cedd哥在github上託管一個叫 python_hello 的包,它需要剛才說的 python_world 包才能執行,那麼可以在它的 setup.py 裡通過 install_requires 宣告依賴,這個宣告也是相容從 git 安裝的:

install_requires=[
	'[email protected]+https://github.com/ceddlyburge/python_world#egg=python_world-0.0.1',
]

所以當你用下面這句命令安裝 python_hello 的時候,它不僅會從github下載自己,還會下載 python_world ,一併裝上:

pip install git+https://github.com/ceddlyburge/python_hello#egg=python_hello

但如果一直寫這麼長的命令,就讓人很煩了,那麼其實可以把這個依賴寫入到 requirements.txt 中,然後每次只需要執行 pip install -r requirements.txt 即可,省去了許多細節。

但是,如果我們想要用最常見的 pip install python_hello 來安裝,那麼就還需要一個Pypi Server,它提供由 Pep 503 定義的Pypi索引規範。其實這個索引很簡單,手工都可以擼出來,cedd哥就擼了一個,通過github pages站點提供服務,就是 這個 啦,開啟可以看到有個 python_world 的超連結,連結到 專案頁面 ,這個頁面只有一個帶版本號的連結,指向 git 安裝地址。頁面的關鍵元素如下:

<a href="git+https://github.com/ceddlyburge/python_world#egg=python_world-0.0.1" data-requires-python=">=3.6.0">python_world-0.0.1</a>

這個站點的 原始碼 在這裡,確實是非常簡單的。有了 Pypi Server 之後,就可以使用下面這個命令來安裝了:

pip install python_hello --extra-index-url https://ceddlyburge.github.io/python-package-server/

這個時候,你只需要在 pip 的配置檔案( ~/.pip/pip.conf )中把 --extra-index-url https://ceddlyburge.github.io/python-package-server/ 引數隱藏起來,就可以用簡短的 pip install python_hello 安裝了。

結論就是使用雲託管的 git 作為 Pypi Server是可行的,對,不僅僅是 github,其它 git 託管廠商也可以的,國內的也可以,有pages服務的尤其好,另外就是私有倉庫也是支援的,就是拉取程式碼的時候,需要輸入賬號密碼(如有)或者需要提前配置好SSH證書。