GitLab PyPi Repository
原文:https://docs.gitlab.com/ee/user/packages/pypi_repository/
- Setting up your development environment
- Enabling the PyPi Repository
- Getting started
- Adding the GitLab PyPi Repository as a source
- Uploading packages
- Install packages
GitLab PyPi Repository
Introduced in GitLab Premium 12.10.
使用 GitLab PyPi 信息库,每个项目都可以有自己的空间来存储 PyPi 软件包.
GitLab PyPi 存储库可用于:
Setting up your development environment
Enabling the PyPi Repository
注意:仅当您的 GitLab 管理员启用了对 Package Registry 的支持时,此选项才可用.
启用 PyPi 储存库后,默认情况下它将可用于所有新项目. 要为现有项目启用它,或者要禁用它:
- 导航到项目的“设置”>”常规”>”可见性,项目功能,权限” .
- 找到”软件包”功能并启用或禁用它.
- 单击保存更改以使更改生效.
然后,您应该能够在左侧栏中看到” 程序包和注册表”部分.
Getting started
本节将介绍如何创建一个新的示例 PyPi 包进行上传. 这是测试GitLab PyPi Registry的快速入门. 如果您已经了解如何构建和发布自己的软件包,请继续下一节 .
Create a project
了解如何创建完整的 Python 项目不在本指南的范围内,但是您可以创建一个小包来测试注册表. 首先创建一个名为MyPyPiPackage
的新目录:
mkdir MyPyPiPackage && cd MyPyPiPackage
创建此目录后,在其中创建另一个目录:
mkdir mypypipackage && cd mypypipackage
在此目录中创建两个新文件以设置基本项目:
touch __init__.py
touch greet.py
在greet.py
,添加以下代码:
def SayHello():
print("Hello from MyPyPiPackage")
return
在__init__.py
文件中,添加以下内容:
from .greet import SayHello
现在,我们的项目基础已经完成,我们可以测试代码是否运行. 在顶部MyPyPiPackage
目录中启动 Python 提示符. 然后运行:
>>> from mypypipackage import SayHello
>>> SayHello()
您应该看到类似于以下内容的输出:
Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mypypipackage import SayHello
>>> SayHello()
Hello from MyPyPiPackage
验证示例项目是否按上述要求工作后,接下来就可以创建包了.
Create a package
在您的MyPyPiPackage
目录中,我们需要创建一个setup.py
文件. 运行以下命令:
touch setup.py
该文件包含有关我们软件包的所有信息. 有关此文件的更多信息,请参见创建 setup.py . 对于本指南,我们不需要大量填写此文件,只需将以下内容添加到您的setup.py
:
import setuptools
setuptools.setup(
name="mypypipackage",
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
保存文件,然后执行如下设置:
python3 setup.py sdist bdist_wheel
如果成功,您应该能够在新创建的dist
文件夹中看到输出. 跑:
ls dist
并确认您的输出与以下内容匹配:
mypypipackage-0.0.1-py3-none-any.whl mypypipackage-0.0.1.tar.gz
现在,我们的软件包已全部设置好,可以上传到GitLab PyPi 软件包注册中心 . 在此之前,我们接下来需要设置身份验证.
Adding the GitLab PyPi Repository as a source
Authenticating with a personal access token
您将需要以下内容:
- 个人访问令牌. 您可以生成范围设置为
api
的个人访问令牌 ,以进行存储库身份验证. - 您的来源的合适名称.
- 您的项目 ID,可以在项目的主页上找到.
编辑~/.pypirc
文件并添加以下内容:
[distutils]
index-servers =
gitlab
[gitlab]
repository = https://gitlab.com/api/v4/projects/<project_id>/packages/pypi
username = __token__
password = <your personal access token>
Authenticating with a deploy token
您将需要以下内容:
- 部署令牌. 您可以生成令牌部署与
read_package_registry
和/或write_package_registry
范围为存储库认证. - 您的来源的合适名称.
- 您的项目 ID,可以在项目的主页上找到.
编辑~/.pypirc
文件并添加以下内容:
[distutils]
index-servers =
gitlab
[gitlab]
repository = https://gitlab.com/api/v4/projects/<project_id>/packages/pypi
username = <deploy token username>
password = <deploy token>
Uploading packages
上载套件时,请注意:
- 允许的最大大小为 50 MB.
- 如果您多次上传具有相同版本的相同程序包,则每次连续上传都将保存为单独的文件. 安装软件包时,GitLab 将提供最新文件.
Upload packages with Twine
如果您按照上面的指南进行操作,则MyPyPiPackage
软件包应已准备好上载. 运行以下命令:
python3 -m twine upload --repository gitlab dist/*
如果成功,您应该看到以下内容:
Uploading distributions to https://gitlab.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]
这表明该软件包已成功上传. 然后,您可以导航到项目的” 程序包和注册表”页面,并查看上载的程序包.
如果您没有遵循上述指南,则需要确保已正确构建软件包,并使用 setuptools 创建了 PyPi 软件包 .
然后,您可以使用以下命令上传软件包:
python -m twine upload --repository <source_name> dist/<package_file>
Where:
Install packages
使用以下命令安装最新版本的软件包:
pip install --index-url https://__token__:<personal_access_token>@gitlab.com/api/v4/projects/<project_id>/packages/pypi/simple --no-deps <package_name>
Where:
<package_name>
是软件包名称.<personal_access_token>
是具有read_api
范围的个人访问令牌.<project_id>
是项目 ID.
如果您遵循上面的指南,并且想测试安装MyPyPiPackage
软件包,则可以运行以下命令:
pip install mypypipackage --no-deps --index-url https://__token__:<personal_access_token>@gitlab.com/api/v4/projects/<your_project_id>/packages/pypi/simple
这将导致以下结果:
Looking in indexes: https://__token__:****@gitlab.com/api/v4/projects/<your_project_id>/packages/pypi/simple
Collecting mypypipackage
Downloading https://gitlab.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