如何使用极狐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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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.修改…