如何使用極狐GitLab 軟件包倉庫功能托管 python?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有:

  • 極狐GitLab 中文文檔
  • 極狐GitLab 中文論壇
  • 極狐GitLab 官網

軟件包庫中的 PyPI 包 (BASIC ALL)

在項目的軟件包庫中發布 PyPI 包。然后在需要將它們用作依賴項時安裝它們。
軟件包庫適用于:

  • pip
  • twine

使用極狐GitLab 軟件包庫進行身份驗證

在您發布到極狐GitLab 軟件包倉庫之前,您必須進行認證。
要如此,您可以使用:

  • 一個具有 api 范圍的個人訪問令牌。
  • 一個具有 read_package_registry 或/和 write_package_registry 范圍的部署令牌。
  • 一個 CI 作業令牌。

請勿使用此處文檔記錄的方法以外的其他身份驗證方法。 未記錄的身份驗證方法可能會在將來刪除。

TWINE_USERNAMETWINE_PASSWORD 環境變量用于使用極狐GitLab 令牌進行身份驗證。

使用個人訪問令牌進行認證

要使用個人訪問令牌進行身份驗證,請更新 TWINE_USERNAMETWINE_PASSWORD 環境變量:

image: python:latestrun:variables:TWINE_USERNAME: <your_personal_access_token_name>TWINE_PASSWORD: <your_personal_access_token>script:- pip install build twine- python -m build- python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*

使用部署令牌進行認證

要使用部署令牌進行身份驗證,請更新 TWINE_USERNAMETWINE_PASSWORD 環境變量:

image: python:latestrun:variables:TWINE_USERNAME: <deploy token username>TWINE_PASSWORD: <deploy token>script:- pip install build twine- python -m build- python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*

使用 CI 作業令牌進行認證

要使用 CI 作業令牌進行身份驗證,請更新 TWINE_USERNAMETWINE_PASSWORD 環境變量:

image: python:latestrun:variables:TWINE_USERNAME: gitlab-ci-tokenTWINE_PASSWORD: $CI_JOB_TOKENscript:- pip install build twine- python -m build- python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*

進行身份驗證以訪問某個群組內的軟件包

遵循上述的令牌類型指南,但使用群組 URL 代替項目 URL:

https://gitlab.example.com/api/v4/groups/<group_id>/-/packages/pypi

發布 PyPI 軟件包

先決條件:

  • 您必須使用軟件包庫進行身份驗證。

  • 您的版本字符串必須有效。

  • 允許的最大包大小為 5 GB。

  • description 字段的最大長度為 4000 字符。更長的 description 字符串會被截斷。

  • 不能多次上傳同一版本的包。如果您嘗試,您會收到錯誤 400 Bad Request

  • 使用您的 項目 ID 發布 PyPI 包。

  • 如果您的項目在一個群組中,則發布到您的項目庫的 PyPI 包也可以在群組級庫中使用(請參閱從群組級別安裝)。

然后,您就可以使用 twine 發布 PyPI 包。

使用 twine 發布 PyPI 包

定義您的倉庫源,編輯 ~/.pypirc 文件并添加:

[distutils]
index-servers =gitlab[gitlab]
repository = https://gitlab.example.com/api/v4/projects/<project_id>/packages/pypi

要發布 PyPI 包,請運行類似的命令:

python3 -m twine upload --repository gitlab dist/*

如下消息預示著包已成功發布:

Uploading distributions to https://gitlab.example.com/api/v4/projects/<your_project_id>/packages/pypi
Uploading mypypipackage-0.0.1-py3-none-any.whl
100%|███████████████████████████████████████████████████████████████████████████████████████████| 4.58k/4.58k [00:00<00:00, 10.9kB/s]
Uploading mypypipackage-0.0.1.tar.gz
100%|███████████████████████████████████████████████████████████████████████████████████████████| 4.24k/4.24k [00:00<00:00, 11.0kB/s]

要查看已發布的軟件包,前往您項目的 軟件包與鏡像庫 頁面。
如果您沒有使用 .pypirc 文件來定義倉庫源,則可以使用內聯身份驗證發布到倉庫:

TWINE_PASSWORD=<personal_access_token or deploy_token or $CI_JOB_TOKEN> TWINE_USERNAME=<username or deploy_token_username or gitlab-ci-token> python3 -m twine upload --repository-url https://gitlab.example.com/api/v4/projects/<project_id>/packages/pypi dist/*

如果您沒有遵循此頁面上的步驟,請確保您的包已正確構建,并且您使用 setuptools 創建了一個 PyPI 包.
然后,您就可以使用如下的命令來上傳您的軟件包:

python -m twine upload --repository <source_name> dist/<package_file>
  • <package_file> 是您的軟件包文件名,以 .tar.gz.whl 結尾。

  • <source_name> 是設置期間使用的源名稱。

發布具有相同名稱或版本的軟件包

如果具有相同名稱和版本的軟件包已經存在,則您無法發布軟件包。您必須先刪除現有的軟件包。如果您嘗試多次發布同一個軟件包,則會發生 400 Bad Request 錯誤。

安裝 PyPI 軟件包

當在軟件包倉庫中找不到 PyPI 軟件包時,請求轉發到 pypi.org。

管理員可以在持續集成設置中禁用此行為。

WARNING:當您使用 --index-url 選項時,不要指定默認端口,例如 80http 開頭的 URL,或 443https 開頭的 URL。

從項目進行安裝

要安裝最新版本的軟件包,使用以下命令:

pip install --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple --no-deps <package_name>
  • <package_name> 是軟件包名稱。

  • <personal_access_token_name> 是具有 read_api 范圍的個人訪問令牌名稱。

  • <personal_access_token> 是具有 read_api 范圍的個人訪問令牌。

  • <project_id> 是項目的 URL 編碼路徑(例如:group%2Fproject),或項目 ID(例如:42)。

在這些命令中,您可以使用 --extra-index-url 代替 --index-url。如果您遵循指南,并想要安裝 MyPyPiPackage 軟件包,您可以運行:

pip install mypypipackage --no-deps --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/projects/<your_project_id>/packages/pypi/simple

如下信息顯示軟件包已成功安裝:

Looking in indexes: https://<personal_access_token_name>:****@gitlab.example.com/api/v4/projects/<your_project_id>/packages/pypi/simple
Collecting mypypipackageDownloading https://gitlab.example.com/api/v4/projects/<your_project_id>/packages/pypi/files/d53334205552a355fee8ca35a164512ef7334f33d309e60240d57073ee4386e6/mypypipackage-0.0.1-py3-none-any.whl (1.6 kB)
Installing collected packages: mypypipackage
Successfully installed mypypipackage-0.0.1
安全性影響

當安全 PyPI 時,使用 --extra-index-url--index-url 時,安全性影響很大,值得深入了解。如果您在使用:

  • --index-url:此選項會替換具有指定 URL 的 PyPI 索引。它是更安全的,因為它僅檢查指定索引中的包。在您想確保僅從信任的私人源安裝包時使用此選項。

  • --extra-index-url:此選項會將附加索引添加到默認的 PyPI 索引。它是不安全的,因為它會檢查默認的 PyPI 索引和附加索引中的包,因此會導致依賴混淆攻擊。

從群組安裝

要從群組安裝最新版本的軟件包,使用以下命令:

pip install --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/groups/<group_id>/-/packages/pypi/simple --no-deps <package_name>

在此命令中:

  • <package_name> 是軟件包名稱。

  • <personal_access_token_name> 是具有 read_api 范圍的個人訪問令牌名稱。

  • <personal_access_token> 是具有 read_api 范圍的個人訪問令牌。

  • <group_id> 是群組 ID。

在這些命令中,您可以使用 --extra-index-url 代替 --index-url。然而,使用 --extra-index-url 會使您受到依賴混淆攻擊的影響,因為它會在檢查自定義倉庫之前檢查 PyPi 倉庫中的包。 --extra-index-url 添加了提供的 URL 作為額外的倉庫,客戶端將檢查它是否存在包。 --index-url 告訴客戶端僅在提供的 URL 中檢查包。

如果您遵循指南,并且想要安裝 MyPyPiPackage 軟件包,您可以運行:

pip install mypypipackage --no-deps --index-url https://<personal_access_token_name>:<personal_access_token>@gitlab.example.com/api/v4/groups/<your_group_id>/-/packages/pypi/simple

軟件包名稱

極狐GitLab 查找使用 PEP-503 標準化名稱的軟件包。-_. 都被視為相同,并且重復的字符會被刪除。
針對 my.packagepip install 請求會查找匹配任何三個字符的包,例如 my-packagemy_packagemy....package

使用 requirements.txt

如果您想 pip 能夠訪問您的公共倉庫,請將 --extra-index-url 參數與您的倉庫 URL 一起添加到您的 requirements.txt 文件中。

--extra-index-url https://gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple
package-name==1.0.0

如果這是私有倉庫,您可以使用以下方式進行身份驗證:

  • 使用您的 requirements.txt 文件:
--extra-index-url https://__token__:<your_personal_token>@gitlab.example.com/api/v4/projects/<project_id>/packages/pypi/simple
package-name==1.0.0
  • 使用 ~/.netrc 文件:
machine gitlab.example.com
login __token__
password <your_personal_token>

版本化 PyPI 軟件包

正確的版本化對高效管理 PyPI 軟件包是非常重要的。遵循這些最佳實踐以確保您的軟件包能夠正確版本化。

使用語義化版本號(SemVer)

為您的軟件包采用語義化版本號(SemVer)。版本號應使用格式 MAJOR.MINOR.PATCH:

  • 為不兼容的 API 變更,增加 MAJOR 版本號。
  • 為向后兼容的新功能,增加 MINOR 版本號。
  • 為向后兼容的 bug 修復,增加 PATCH 版本號。

比如,1.0.0、1.1.0、1.1.1。

從 0.1.0 開始

對于新項目,從 0.1.0 開始。這表示初始開發階段,API 還未穩定。

使用有效的版本設置

確保您的版本字符串符合 PyPI 標準。極狐GitLab 使用特定的正則表達式來驗證版本字符串:

\A(?:v?(?:([0-9]+)!)?                                                 (?# epoch)([0-9]+(?:\.[0-9]+)*)                                          (?# release segment)([-_\.]?((a|b|c|rc|alpha|beta|pre|preview))[-_\.]?([0-9]+)?)?  (?# pre-release)((?:-([0-9]+))|(?:[-_\.]?(post|rev|r)[-_\.]?([0-9]+)?))?       (?# post release)([-_\.]?(dev)[-_\.]?([0-9]+)?)?                                (?# dev release)(?:\+([a-z0-9]+(?:[-_\.][a-z0-9]+)*))?                         (?# local version)
)\z}xi

故障排查

為了改善性能,pip 命令會緩存與軟件包相關的文件。Pip 不自行刪除數據。緩存會隨著新軟件包的安裝而增長。如果您遇到問題,請使用此命令清除緩存:

pip cache purge

多個 index-urlextra-index-url 參數

您可以定義多個 index-urlextra-index-url 參數。
如果您使用令牌認證多次使用了相同的域名名稱(例如:gitlab.example.com),pip 可能無法找到您的軟件包。這個問題是由在命令執行期間 pip 注冊和存儲令牌導致。
為解決此問題,你可以使用一個群組部署令牌,該令牌來自所有作為 index-urlextra-index-url 值所指向目標的項目或群組的共同父群組,且其權限范圍為 read_package_registry
要解決此問題,您可以

支持的 CLI 命令

極狐GitLab PyPI 倉庫支持如下 CLI 命令:

  • twine upload: 將軟件包上傳到倉庫。

  • pip install: 從倉庫安裝 PyPI 軟件包。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82437.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

K8s中的containerPort與port、targetPort、nodePort的關系:

pod中的containerPort與service中的port、targetPort、nodePort的關系&#xff1a; 1、containerPort為pod的配置&#xff0c;對應pod內部服務監聽的具體端口&#xff0c;例如nginx服務默認監聽80端口&#xff0c;那么nginx的pod的containerPort應該配置為80&#xff0c;例如m…

面試題:QTableView和QTableWidget的異同

目錄 1.QTableView簡介 2.QTableWidget簡介 3.QTableView和QTableWidget不同 4.總結 1.QTableView簡介 QTableView是一個基于模型-視圖架構的表格控件&#xff0c;用于展示表格形式的數據。同樣需要關聯一個QAbstractTableModel或其子類&#xff08;如QStandardItemModel&a…

smbd:快速拉取服務端SMB共享文件腳本工具

地址:https://github.com/MartinxMax/smbd smbd 是一款簡單的 Bash 腳本&#xff0c;用於自動化從共享目錄透過 SMB/CIFS 協議下載檔案的過程。此工具設計用來與遠端 SMB 分享進行互動&#xff0c;並將其內容下載到本地目錄中。 環境需求 $ apt install smbclient 使用方式 …

MiInsertVad函數分析之nt!MMVAD結構

MiInsertVad函數分析之nt!MMVAD結構 1: kd> dt nt!MMVAD 89520270 0x000 u1 : __unnamed 0x004 LeftChild : (null) 0x008 RightChild : (null) 0x00c StartingVpn : 0x2b0 0x010 EndingVpn : 0x2c5 0x014 u …

OSPF不規則區域劃分

1、建立一條虛鏈路 vlink 可以被視為是??區域的?段延伸。 這?條虛擬的鏈路&#xff0c;只能夠跨域?個???區域。 [r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 [r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2 在沒有建立虛鏈路之前,r1是不能ping r4的。vlink建?的鄰居關…

Webug4.0靶場通關筆記-靶場搭建方法(3種方法)

目錄 一、虛擬機綠色版本 1. 開啟phpstudy 2. 訪問靶場 二、Docker版本 1.拉取鏡像 2.啟動鏡像 三、源碼安裝版本 1. 搭建環境 &#xff08;1&#xff09;安裝PHPStudy &#xff08;2&#xff09;WeBug4.0靶場源碼 &#xff08;3&#xff09;安裝Navicat &#xff…

Linux:進程間通信---消息隊列信號量

文章目錄 1.消息隊列1.1 消息隊列的原理1.2 消息隊列的系統接口 2. 信號量2.1 信號量的系統調用接口 3. 淺談進程間通信3.1 IPC在內核中數據結構設計3.2 共享內存的缺點3.3 理解信號量 序&#xff1a;在上一章中&#xff0c;我們引出了命名管道和共享內存的概念&#xff0c;了解…

電子電器架構 --- 車載網關的設計

我是穿拖鞋的漢子&#xff0c;魔都中堅持長期主義的汽車電子工程師。 老規矩&#xff0c;分享一段喜歡的文字&#xff0c;避免自己成為高知識低文化的工程師&#xff1a; 鈍感力的“鈍”&#xff0c;不是木訥、遲鈍&#xff0c;而是直面困境的韌勁和耐力&#xff0c;是面對外界…

華為云Git使用與GitCode操作指南

案例介紹 本文檔帶領開發者學習如何在云主機上基于GitCode來使用Git來管理自己的項目代碼,并使用一些常用的Git命令來進行Git環境的設置。 案例內容 1 概述 1.1 背景介紹 Git 是一個快速、可擴展的分布式版本控制系統,它擁有異常豐富的命令集,可以提供高級操作和對內部…

ESP32開發入門(七):HTTP開發實踐

一、HTTP協議基礎 1.1 什么是HTTP&#xff1f; HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是互聯網上應用最為廣泛的一種網絡協議&#xff0c;用于從服務器傳輸超文本到本地瀏覽器。它是一種無狀態的請求/響應協議&#xff0c;工作…

Python 對象引用、可變性和垃圾 回收(變量不是盒子)

變量不是盒子 1997 年夏天&#xff0c;我在 MIT 學了一門 Java 課程。Lynn Andrea Stein 教授 &#xff08;一位獲獎的計算機科學教育工作者&#xff0c;目前在歐林工程學院教書&#xff09;指 出&#xff0c;人們經常使用“變量是盒子”這樣的比喻&#xff0c;但是這有礙于理…

局域網常用的測速工具,Iperf3使用教程

目錄 下載方式 Windows Linux 使用方法&#xff1a;測試局域網帶寬 步驟一&#xff1a;服務端準備 步驟二&#xff1a;客戶端發起連接 步驟三&#xff1a;查看結果 參數說明 1. Iperf常用參數&#xff08;測試夠用&#xff09; 2. 通用參數&#xff08;Server端和Cli…

《深入理解分布式系統》之認識分布式系統

本文是閱讀深入理解分布式系統第一章認識分布式系統時的筆記。 分布式系統的特點 多進程不共享操作系統不共享時鐘 分布式系統 由多個可獨立運行的子系統組成。每個子系統可以獨立選擇運行平臺。不同的運行平臺存在差異&#xff0c;比如操作系統&#xff0c;硬件規格等。由…

UE5 PCG學習筆記

https://www.bilibili.com/video/BV1onUdY2Ei3/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 一、安裝PCG 插件里選擇以下進行安裝 移動目錄后&#xff0c;可以使用 Update Redirector References&#xff0c;更新下&#xff0…

工業現場ModbusTCP轉EtherNETIP網關引領生物現場領新浪潮

生物質發生器是一種能夠產生、培養生物的設備。客戶現場需要將生物發生器連接到羅克韋爾系統&#xff0c;但是二者協議無法直接通訊&#xff0c;需要通過ModbusTCP轉Ethernet/IP網關將兩者進行通訊連接&#xff0c;生物質發生器以其獨特的工作原理和優勢&#xff0c;使得生物的…

寶藍德中間件部署war包時,配置的絕對路徑讀取錯誤。

文章目錄 問題場景解決辦法寶藍德是什么&#xff1f;&#xff1f;一、基礎環境與依賴配置二、自動化部署工具鏈三、高可用性與集群配置四、安全與合規性措施五、產品線差異化部署六、典型部署流程示例七、運維與優化 原因1. 明確“當前工作目錄”與“絕對路徑”的關系2. 問題根…

Java、Python、NodeJS等開發環境安裝及配置鏡像加速到國內源

文章目錄 Java1.Windows1.1 scoop方式安裝JDK 2.Linux2.1 apt方式安裝JDK2.1.1 切換JDK2.1.2 驗證版本2.1.3 原理 Python1.Windows1.1 scoop方式安裝Python1.2 uv方式安裝Python&#xff08;推薦&#xff09; 2.Linux2.1 apt方式安裝Python2.1.1 配置版本切換2.1.2 切換Python2…

Linux系統管理與編程16:PXE自動化安裝部署centos7.9操作系統

蘭生幽谷&#xff0c;不為莫服而不芳&#xff1b; 君子行義&#xff0c;不為莫知而止休。 0.準備 1&#xff09;防火墻和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config (很不好的…

MCP(Model Context Protocol)是專為LLM(大語言模型)應用設計的標準化協議

核心定義 MCP&#xff08;Model Context Protocol&#xff09;是專為LLM&#xff08;大語言模型&#xff09;應用設計的標準化協議&#xff0c;通過安全可控的方式向AI應用暴露數據和功能。主要提供以下能力&#xff1a; 標準化的上下文管理安全的功能調用接口跨平臺的數據交…

Fiori學習專題三十四:Responsiveness

在這一步中&#xff0c;我們提高了應用程序的響應能力。SAPUI5應用程序可以在手機、平板電腦和臺式機設備上運行&#xff0c;我們可以配置應用程序以充分利用每種場景的屏幕狀態。幸運的是&#xff0c;像sap.m.Table這樣的SAPUI5控件已經提供了許多我們可以使用的功能。 1.修改…