使您的所有私人包在一個地方可以訪問
使用此GitHub託管的PYPI指數
描述•嘗試一下! •開始•修改索引軟件包•常見問題•有關供應鏈攻擊的單詞•貢獻•參考
該存儲庫是用作PYPI索引的GitHub頁面,符合PEP503。
您可以使用它將所有軟件包在一個地方分組,並通過pip輕鬆訪問它,幾乎就像其他任何包裝一樣!
雖然PYPI索引是公共的,但此處索引的私人軟件包是私人的:您將需要GitHub身份驗證才能檢索它。
訪問astariul.github.io/github-hosted-pypi/,然後嘗試在此處安裝索引的軟件包!
嘗試安裝包裝public-hello :
pip install public-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/它還將自動安裝mydependency軟件包!
嘗試:
from public_hello import hi
print ( hi ())您也可以安裝特定版本:
pip install public-hello==0.1 --extra-index-url https://astariul.github.io/github-hosted-pypi/現在嘗試安裝包裝private-hello :
pip install private-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/它將行不通,因為它是私人的,只有我才能訪問它!
Settings ,然後啟用GitHub頁面index.html和pkg_template.html<user>.github.io/<repo_name>查看您的PYPI索引現在,您的PYPI索引已設置,您可以註冊 /更新 /刪除軟件包索引。
GitHub操作是為您自動進行的。
您只需要:
Actions選項卡register / update / delete )並手動觸發它如您所知,如果在表單pip install git+<repo_link>中給出, pip可以安裝GitHub託管軟件包。該PYPI索引只是與其他GitHub存儲庫的鏈接的索引。
GitHub頁面是公開的,因此該PYPI指數是公開的。但是它只包含指向其他GitHub存儲庫的鏈接,此PYPI索引上沒有託管代碼!
如果存儲庫託管代碼是私有的,則需要使用GitHub進行身份驗證以便能夠克隆它,從而有效地將其私有化。
如果您更加專門了解供應鏈攻擊,請檢查有關它的部分!
運行pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ ,以下情況發生:
pip將查看https://pypi.org/ ,默認,公共索引,試圖找到帶有指定名稱的軟件包。https://astariul.github.io/github-hosted-pypi/ 。pip ( git+<repo_link>@<tag> )。pip了解它是一個GitHub存儲庫,並將在本地克隆存儲庫(在特定標籤上)。pip安裝軟件包。pip通過相同的步驟安裝任何缺失的依賴關係。身份驗證在克隆存儲庫時發生在步驟4。
唯一的最佳實踐是使用GitHub版本。這允許您的軟件包具有特定標籤引用的版本。
為此:
pip install git+<repo_link>@<tag>安裝軟件包git+<repo_link>@<tag> )。 您可以為索引包指定其他名稱。註冊時只需在表格中給它一個不同的名稱即可。
例如,如果您有一個名為tensorflow的私有軟件包,則在此索引中註冊它時,可以將其命名my_cool_tensorflow ,因此沒有公共軟件包tensorflow的名稱collision。
然後,您可以使用pip install my_cool_tensorflow --extra-index-url https://astariul.github.io/github-hosted-pypi/ 。
然後從python ,您可以做:
import tensorflow但是要小心!雖然可以這樣處理它,但最好為您的包裝添加一個唯一的名稱,以避免混亂,也可以解決安全!
構建Docker映像不是交互式的,因此沒有提示輸入用戶名和密碼。
取而代之的是,您應該將GitHub憑據放入.netrc文件中,因此pip從GitHub克隆時可以進行身份驗證。
要在Docker上安全地執行此操作,您應該使用Docker Secrets。這是關於如何做的快速教程:
步驟1 :將您的憑據保存在秘密文件中。請按照此示例:
machine github.com
login <gh_user>
password <gh_pass>
n 。
因此,如果您使用的是用空格替換選項卡的IDE或您在Windows上的IDE(在線結尾為rn )!
讓我們命名此文件gh_auth.txt 。
步驟2 :創建您的Docker文件。在Docker文件中,您應該將秘密文件安裝在.netrc中,並在需要身份驗證的地方運行命令。例如 :
# syntax=docker/dockerfile:experimental
FROM python:3
RUN --mount=type=secret,id=gh_auth,dst=/root/.netrc pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/步驟3 :構建您的Docker映像,指定步驟1中創建的秘密的位置:
sudo DOCKER_BUILDKIT=1 docker build --secret id=gh_auth,src=./gh_auth.txt .
如果您有任何疑問或想法來改善此常見問題解答,請打開PR /空白問題!
如您之前所看到的,該GitHub託管索引依賴於pip功能--extra-index-url 。由於此功能的工作原理,因此很容易受到供應鏈攻擊的影響。
例如,假設您有一個名為fbi_package版本2.8.3的軟件包,該軟件包託管在您的私人PYPI索引上。
攻擊者可以創建具有相同名稱和更高版本的惡意軟件包(例如99.0.0 )。
當您運行pip install fbi_package --extra-index-url my_pypi_index.com下,在Hood pip下,將下載最新版本的軟件包,即惡意軟件包!
雖然該存儲庫使擁有自己的PYPI索引非常方便,但請注意頁面是公開的,因此任何人都可以看到您使用的包裝名稱,並創建一個具有相同名稱的惡意軟件包...
這就是為什麼我們將自動支票納入此私人PYPI索引的原因。每當您訪問軟件包的頁面時,都會調用PYPI API,如果找到具有相同名稱和更高版本的軟件包,則將安裝命令替換為警告。
您可以在https://astariul.github.io/github-hosted-pypi/transformers/上看到此類警告的演示。
如果您看到此警告,請不要安裝軟件包!相反,更改包裝的名稱或升級其公共對應方上方的版本。
在那裡小心!
歡迎問題和公關!
如果您遇到任何奇怪的 /可以改善的怪異,請聯繫!
這個存儲庫極大地啟發了這一點。
這只是一個光榮的版本,具有清潔頁面和github操作,可輕鬆添加,更新和從索引中刪除軟件包。
還要檢查原始作者的博客文章!
頁面中使用的圖標是由Flaticon的Freepik製作的