Artipie:可用於 Python 的開源倉庫管理器
在學生時代使用 Python 開發時,我發現我需要一些私人的集中存儲。這樣我就可以存儲二進位和文本數據文件,以及 Python 軟體包。我在 Artipie 中找到了答案,這是一個開源的自託管的軟體倉庫管理器。
在大學裡,我和我的同事們對來自實驗測量的大量數據進行研究。我使用 Python 來處理和可視化它們。當時我的大學同事是數學家,沒有軟體開發技術的經驗。他們通常只是在快閃記憶體盤上或通過電子郵件傳遞數據和代碼。我努力向他們介紹像 Git 這樣的版本管理系統,但沒有成功。
Python 倉庫
Artipie 支持 PyPI 倉庫,與 twine 和 pip 兼容。這意味著你可以完全像在 PyPI 和 TestPyPI 倉庫上安裝或發布軟體包那樣使用 Artipie Python 倉庫。
要創建你自己的 Python 倉庫,你可以使用名為 Artipie Central 的 Artipie 託管實例。當你登錄後,你會看到一個列出你的倉庫的頁面(開始時是空的),以及一個添加新倉庫的表單。為你的新倉庫選擇一個名字(例如,mypython
),選擇 Python
作為倉庫類型,然後點擊 「 添加 」 按鈕。
接下來,你會看到一個以 YAML 格式顯示倉庫設置的頁面:
repo:
type: pypi
storage: default
permissions:
olenagerasimova:
- upload
"*":
- download
配置中的 type
映射設置了倉庫的類型。在這個例子中,Python 倉庫被配置為默認的 Artipie Central 存儲。
storage
映射定義了所有倉庫包的存儲位置。這可以是任何文件系統或 S3 存儲兼容的位置。Artipie Central 有一個預先配置的 default
存儲,可以使用它進行測試。
permissions
映射允許為用戶 olenagerasimova
上傳,並允許任何人下載任何軟體包。
為了確保這個倉庫的存在和工作,在你的瀏覽器中打開 索引頁。顯示的是軟體包列表。如果你剛剛創建了一個新的版本庫,但還沒有上傳軟體包,那麼倉庫的索引頁是空白的。
二進位倉庫
你可以在 Artipie 中存儲任何種類的文件。存儲類型是 file
或 binary
,我用這個作為實驗數據的存儲。我把它作為 Python 可視化的輸入。在 Artipie Central 可以創建一個文件倉庫,與 Python 倉庫的方式相同。你給它一個名字,選擇 binary
類型,然後點擊 「 添加 」 按鈕。
repo:
type: file
storage: default
permissions:
olenagerasimova:
- upload
- download
"*":
- download
這些設置基本上與 Python 相同。只有倉庫的類型不同。在這個例子中,二進位倉庫被稱為 data
。它包含三個帶有一些數字的文本文件:
6
3.5
5
4
4.5
3
2.7
5
6
3
1.2
3.2
6
另外兩個文件的形式相同(只是數字不同)。要想自己看這些文件,請在瀏覽器中打開鏈接 一、二 和 三 並下載文件,或者你可以用 httpie
執行 GET 請求:
httpie -a https://central.artipie.com/olenagerasimova/data/y1.dat > ./data/y1.da
這些文件是用 PUT 請求上傳到 Artipie Central 的 data
存儲庫的:
httpie -a olenagerasimova:*** PUT
https://central.artipie.com/olenagerasimova/data/y1.dat @data/y1.dat
httpie -a olenagerasimova:*** PUT
https://central.artipie.com/olenagerasimova/data/y2.dat @data/y2.dat
httpie -a olenagerasimova:*** PUT
https://central.artipie.com/olenagerasimova/data/y3.dat @data/y3.dat
由於這個二進位倉庫的 API 非常簡單(HTTP PUT
和 GET
請求),用任何語言編寫一段代碼來上傳和下載所需的文件都很容易。
Python 項目
可以從我的 GitHub 倉庫中獲得一個 Python 項目的示例源代碼。這個示例的主要想法是,從 Artipie Central 下載三個數據文件,將數字讀入數組,並使用這些數組來繪製一個圖。使用 pip
來安裝這個例子包並運行它:
$ python3 -m pip install --index-url
https://central.artipie.com/olenagerasimova/pypi/
pypiexample
$ python3 -m pypiexample
通過設置 --index-url
到 Artipie Central 的 Python 倉庫,pip
從它那裡下載軟體包,而不是通常默認的 PyPi 倉庫。運行這些命令後,會顯示一個帶有三條曲線的極坐標圖,這是數據文件的可視化。
要將軟體包發布到 Artipie Central 倉庫,請用 twine
構建並上傳:
commandline
$ python setup.py sdist bdist_wheel
$ twine upload --repository-url
https://central.artipie.com/olenagerasimova/pypi
-u olenagerasimova -p *** dist/*
在 Artipie Central 中設置 files
倉庫,並創建一個 Python 示例項目是多麼容易。不過,你不必使用 Artipie Central。Artipie 可以自託管,所以你可以在你自己的本地網路上運行一個倉庫。
將 Artipie 作為一個容器運行
將 Artipie 作為一個容器運行,設置起來就像安裝 Podman 或 Docker 一樣容易。假設你已經安裝了其中之一,打開終端:
$ podman run -it -p 8080:8080 -p 8086:8086 artipie/artipie:latest
這將啟動一個運行最新 Artipie 版本的新容器。它還映射了兩個埠。你的倉庫在 8080 埠提供服務。Artipie 的 Rest API 和 Swagger 文檔在 8086 埠提供。新的鏡像會生成一個默認的配置,列印一個正在運行的倉庫列表,測試證書,以及一個指向 Swagger 文檔的鏈接到你的控制台。
你也可以使用 Artipie Rest API 來查看現有的倉庫:
- 進入 Swagger 文檔頁面
http://localhost:8086/api/index-org.html
。 - 在 「 選擇一個定義 」 列表中,選擇 「 認證令牌 」。
- 生成並複製用戶
artipie
的認證令牌,密碼是artipie
。 - 切換到 「 倉庫 」 定義,點擊 「 認證 」 按鈕,然後粘貼令牌。
對 /api/v1/repository/list
執行一個 GET 請求。在響應中,你會收到一個包含三個默認倉庫的 JSON 列表:
[
"artipie/my-bin",
"artipie/my-docker",
"artipie/my-maven"
]
默認配置中不包括 Python 倉庫。你可以通過從 Swagger 介面向 /api/v1/repository/{user}/{repo}
執行 PUT 請求來糾正。在這種情況下,user
是默認用戶的名字(artipie
),repo
是新倉庫的名字。你可以把你的新 Python 代碼庫稱為 my-pypi
。下面是一個請求體的例子,包含帶倉庫設置的 JSON 對象:
{
"repo": {
"type": "pypi",
"storage": "default",
"permissions": {
"*": [
"download"
],
"artipie": [
"upload"
]
}
}
}
所有的 JSON 欄位都和你在儀錶板上創建 YAML 格式的倉庫時一樣。我們版本庫的類型是 pypi
,使用默認存儲,任何人都可以下載,但只有用戶 artipie
可以上傳。
再次向 /api/v1/repository/list
發出 GET 請求,確保你的倉庫被創建。現在,你有四個倉庫:
[
"artipie/my-bin",
"artipie/my-docker",
"artipie/my-maven",
"artipie/my-pypi"
]
你已經創建了你自己的 Artipie 安裝,包含了幾個倉庫! Artipie 鏡像既可以在個人電腦上運行,也可以在私人網路內的遠程伺服器上運行。你可以用它來在一個公司、團體或大學內交換軟體包。這是一個建立你自己的軟體服務的簡單方法,而且它不僅僅適用於 Python。花些時間來探索 Artipie,看看它能為你帶來什麼。
via: https://opensource.com/article/22/12/python-package-index-repository-artipie
作者:Alena Gerasimova 選題:lkxed 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive