Artipie:可用于 Python 的開源倉庫管理器
在學(xué)生時代使用 Python 開發(fā)時,我發(fā)現(xiàn)我需要一些私人的集中存儲。這樣我就可以存儲二進(jìn)制和文本數(shù)據(jù)文件,以及 Python 軟件包。我在 ??Artipie?? 中找到了答案,這是一個開源的自托管的軟件倉庫管理器。
在大學(xué)里,我和我的同事們對來自實(shí)驗(yàn)測量的大量數(shù)據(jù)進(jìn)行研究。我使用 Python 來處理和可視化它們。當(dāng)時我的大學(xué)同事是數(shù)學(xué)家,沒有軟件開發(fā)技術(shù)的經(jīng)驗(yàn)。他們通常只是在閃存盤上或通過電子郵件傳遞數(shù)據(jù)和代碼。我努力向他們介紹像 ??Git?? 這樣的版本管理系統(tǒng),但沒有成功。
Python 倉庫
Artipie 支持 ??PyPI?? 倉庫,與 ??twine?? 和 ??pip?? 兼容。這意味著你可以完全像在 ??PyPI?? 和 ??TestPyPI?? 倉庫上安裝或發(fā)布軟件包那樣使用 Artipie Python 倉庫。
要創(chuàng)建你自己的 Python 倉庫,你可以使用名為 ??Artipie Central?? 的 Artipie 托管實(shí)例。當(dāng)你登錄后,你會看到一個列出你的倉庫的頁面(開始時是空的),以及一個添加新倉庫的表單。為你的新倉庫選擇一個名字(例如,??mypython?
?),選擇 ??Python?
? 作為倉庫類型,然后點(diǎn)擊 “添加Add” 按鈕。
接下來,你會看到一個以 ??YAML?? 格式顯示倉庫設(shè)置的頁面:
配置中的 ??type?
? 映射設(shè)置了倉庫的類型。在這個例子中,Python 倉庫被配置為默認(rèn)的 Artipie Central 存儲。
??storage?
? 映射定義了所有倉庫包的存儲位置。這可以是任何文件系統(tǒng)或 S3 存儲兼容的位置。Artipie Central 有一個預(yù)先配置的 ??default?
? 存儲,可以使用它進(jìn)行測試。
??permissions?
? 映射允許為用戶 ??olenagerasimova?
? 上傳,并允許任何人下載任何軟件包。
為了確保這個倉庫的存在和工作,在你的瀏覽器中打開 ??索引頁??。顯示的是軟件包列表。如果你剛剛創(chuàng)建了一個新的版本庫,但還沒有上傳軟件包,那么倉庫的索引頁是空白的。
二進(jìn)制倉庫
你可以在 Artipie 中存儲任何種類的文件。存儲類型是 ??file?
? 或 ??binary?
?,我用這個作為實(shí)驗(yàn)數(shù)據(jù)的存儲。我把它作為 Python 可視化的輸入。在 Artipie Central 可以創(chuàng)建一個文件倉庫,與 Python 倉庫的方式相同。你給它一個名字,選擇 ??binary?
? 類型,然后點(diǎn)擊 “添加Add” 按鈕。
這些設(shè)置基本上與 Python 相同。只有倉庫的類型不同。在這個例子中,二進(jìn)制倉庫被稱為 ??data?
?。它包含三個帶有一些數(shù)字的文本文件:
另外兩個文件的形式相同(只是數(shù)字不同)。要想自己看這些文件,請在瀏覽器中打開鏈接 ??一??、??二?? 和 ??三?? 并下載文件,或者你可以用 ??httpie?
? 執(zhí)行 GET 請求:
這些文件是用 PUT 請求上傳到 Artipie Central 的 ??data?
? 存儲庫的:
由于這個二進(jìn)制倉庫的 API 非常簡單(HTTP ??PUT?
? 和 ??GET?
? 請求),用任何語言編寫一段代碼來上傳和下載所需的文件都很容易。
Python 項(xiàng)目
可以從我的 ??GitHub 倉庫??中獲得一個 Python 項(xiàng)目的示例源代碼。這個示例的主要想法是,從 Artipie Central 下載三個數(shù)據(jù)文件,將數(shù)字讀入數(shù)組,并使用這些數(shù)組來繪制一個圖。使用 ??pip?
? 來安裝這個例子包并運(yùn)行它:
通過設(shè)置 ??--index-url?
? 到 Artipie Central 的 Python 倉庫,??pip?
? 從它那里下載軟件包,而不是通常默認(rèn)的 PyPi 倉庫。運(yùn)行這些命令后,會顯示一個帶有三條曲線的極坐標(biāo)圖,這是數(shù)據(jù)文件的可視化。
要將軟件包發(fā)布到 Artipie Central 倉庫,請用 ??twine?
? 構(gòu)建并上傳:
在 Artipie Central 中設(shè)置 ??files?
? 倉庫,并創(chuàng)建一個 Python 示例項(xiàng)目是多么容易。不過,你不必使用 Artipie Central。Artipie 可以自托管,所以你可以在你自己的本地網(wǎng)絡(luò)上運(yùn)行一個倉庫。
將 Artipie 作為一個容器運(yùn)行
將 Artipie 作為一個容器運(yùn)行,設(shè)置起來就像安裝 Podman 或 Docker 一樣容易。假設(shè)你已經(jīng)安裝了其中之一,打開終端:
這將啟動一個運(yùn)行最新 Artipie 版本的新容器。它還映射了兩個端口。你的倉庫在 8080 端口提供服務(wù)。Artipie 的 Rest API 和 Swagger 文檔在 8086 端口提供。新的鏡像會生成一個默認(rèn)的配置,打印一個正在運(yùn)行的倉庫列表,測試證書,以及一個指向 ??Swagger?? 文檔的鏈接到你的控制臺。
你也可以使用 Artipie Rest API 來查看現(xiàn)有的倉庫:
- 進(jìn)入 Swagger 文檔頁面 ?
?http://localhost:8086/api/index-org.html?
?。 - 在 “選擇一個定義Select a definition” 列表中,選擇 “認(rèn)證令牌Auth token”。
- 生成并復(fù)制用戶 ?
?artipie?
? 的認(rèn)證令牌,密碼是 ??artipie?
?。 - 切換到 “倉庫Repositories” 定義,點(diǎn)擊 “認(rèn)證Authorize” 按鈕,然后粘貼令牌。
Image of the Swagger documentation page,
對 ??/api/v1/repository/list?
? 執(zhí)行一個 GET 請求。在響應(yīng)中,你會收到一個包含三個默認(rèn)倉庫的 JSON 列表:
默認(rèn)配置中不包括 Python 倉庫。你可以通過從 Swagger 接口向 ??/api/v1/repository/{user}/{repo}?
? 執(zhí)行 PUT 請求來糾正。在這種情況下,??user?
? 是默認(rèn)用戶的名字(??artipie?
?),??repo?
? 是新倉庫的名字。你可以把你的新 Python 代碼庫稱為 ??my-pypi?
?。下面是一個請求體的例子,包含帶倉庫設(shè)置的 JSON 對象:
所有的 JSON 字段都和你在儀表板上創(chuàng)建 YAML 格式的倉庫時一樣。我們版本庫的類型是 ??pypi?
?,使用默認(rèn)存儲,任何人都可以下載,但只有用戶 ??artipie?
? 可以上傳。
再次向 ??/api/v1/repository/list?
? 發(fā)出 GET 請求,確保你的倉庫被創(chuàng)建?,F(xiàn)在,你有四個倉庫:
你已經(jīng)創(chuàng)建了你自己的 Artipie 安裝,包含了幾個倉庫! Artipie 鏡像既可以在個人電腦上運(yùn)行,也可以在私人網(wǎng)絡(luò)內(nèi)的遠(yuǎn)程服務(wù)器上運(yùn)行。你可以用它來在一個公司、團(tuán)體或大學(xué)內(nèi)交換軟件包。這是一個建立你自己的軟件服務(wù)的簡單方法,而且它不僅僅適用于 Python?;ㄐr間來探索 Artipie,看看它能為你帶來什么。