把Github用作Pypi Server
因為覺得有參考價值,一直開啟許多頁面沒有關閉,瀏覽器的 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證書。
- 談談DDD(領域驅動設計)
- Python虛擬環境教程:使用Virtualenv和Poetry
- 把Github用作Pypi Server
- 比較 REST、JSON:API 和 GraphQL
- Nginx截斷uwsgi Django(Flask)大響應體的問題及解決
- 講清楚POST和PUT的區別
- 當__getattr__()遇上@property,坑倒Python老司機
- 從redis list中獲取多個元素
- mongodb的部分索引和稀疏索引
- mongodb複合索引的ESR原則
- 最容易的編譯webrtc方案
- macOS brew 更新後Python找不到md5
- 在macOS上用supervisor構建穩定的SSH轉發
- 當webrtc遇上_ITERATOR_DEBUG_LEVEL
- 公司網路配置2020