GitLab PyPi Repository

原文:https://docs.gitlab.com/ee/user/packages/pypi_repository/

GitLab PyPi Repository

Introduced in GitLab Premium 12.10.

使用 GitLab PyPi 信息库,每个项目都可以有自己的空间来存储 PyPi 软件包.

GitLab PyPi 存储库可用于:

Setting up your development environment

您将需要最新版本的piptwine .

Enabling the PyPi Repository

注意:仅当您的 GitLab 管理员启用了对 Package Registry 的支持时,此选项才可用.

启用 PyPi 储存库后,默认情况下它将可用于所有新项目. 要为现有项目启用它,或者要禁用它:

  1. 导航到项目的“设置”>”常规”>”可见性,项目功能,权限” .
  2. 找到”软件包”功能并启用或禁用它.
  3. 单击保存更改以使更改生效.

然后,您应该能够在左侧栏中看到” 程序包和注册表”部分.

Getting started

本节将介绍如何创建一个新的示例 PyPi 包进行上传. 这是测试GitLab PyPi Registry的快速入门. 如果您已经了解如何构建和发布自己的软件包,请继续下一节 .

Create a project

了解如何创建完整的 Python 项目不在本指南的范围内,但是您可以创建一个小包来测试注册表. 首先创建一个名为MyPyPiPackage的新目录:

  1. mkdir MyPyPiPackage && cd MyPyPiPackage

创建此目录后,在其中创建另一个目录:

  1. mkdir mypypipackage && cd mypypipackage

在此目录中创建两个新文件以设置基本项目:

  1. touch __init__.py
  2. touch greet.py

greet.py ,添加以下代码:

  1. def SayHello():
  2. print("Hello from MyPyPiPackage")
  3. return

__init__.py文件中,添加以下内容:

  1. from .greet import SayHello

现在,我们的项目基础已经完成,我们可以测试代码是否运行. 在顶部MyPyPiPackage目录中启动 Python 提示符. 然后运行:

  1. >>> from mypypipackage import SayHello
  2. >>> SayHello()

您应该看到类似于以下内容的输出:

  1. Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18)
  2. [Clang 6.0 (clang-600.0.57)] on darwin
  3. Type "help", "copyright", "credits" or "license" for more information.
  4. >>> from mypypipackage import SayHello
  5. >>> SayHello()
  6. Hello from MyPyPiPackage

验证示例项目是否按上述要求工作后,接下来就可以创建包了.

Create a package

在您的MyPyPiPackage目录中,我们需要创建一个setup.py文件. 运行以下命令:

  1. touch setup.py

该文件包含有关我们软件包的所有信息. 有关此文件的更多信息,请参见创建 setup.py . 对于本指南,我们不需要大量填写此文件,只需将以下内容添加到您的setup.py

  1. import setuptools
  2. setuptools.setup(
  3. name="mypypipackage",
  4. version="0.0.1",
  5. author="Example Author",
  6. author_email="author@example.com",
  7. description="A small example package",
  8. packages=setuptools.find_packages(),
  9. classifiers=[
  10. "Programming Language :: Python :: 3",
  11. "License :: OSI Approved :: MIT License",
  12. "Operating System :: OS Independent",
  13. ],
  14. python_requires='>=3.6',
  15. )

保存文件,然后执行如下设置:

  1. python3 setup.py sdist bdist_wheel

如果成功,您应该能够在新创建的dist文件夹中看到输出. 跑:

  1. ls dist

并确认您的输出与以下内容匹配:

  1. 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文件并添加以下内容:

  1. [distutils]
  2. index-servers =
  3. gitlab
  4. [gitlab]
  5. repository = https://gitlab.com/api/v4/projects/<project_id>/packages/pypi
  6. username = __token__
  7. password = <your personal access token>

Authenticating with a deploy token

您将需要以下内容:

  • 部署令牌. 您可以生成令牌部署read_package_registry和/或write_package_registry范围为存储库认证.
  • 您的来源的合适名称.
  • 您的项目 ID,可以在项目的主页上找到.

编辑~/.pypirc文件并添加以下内容:

  1. [distutils]
  2. index-servers =
  3. gitlab
  4. [gitlab]
  5. repository = https://gitlab.com/api/v4/projects/<project_id>/packages/pypi
  6. username = <deploy token username>
  7. password = <deploy token>

Uploading packages

上载套件时,请注意:

  • 允许的最大大小为 50 MB.
  • 如果您多次上传具有相同版本的相同程序包,则每次连续上传都将保存为单独的文件. 安装软件包时,GitLab 将提供最新文件.

Upload packages with Twine

如果您按照上面的指南进行操作,则MyPyPiPackage软件包应已准备好上载. 运行以下命令:

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

如果成功,您应该看到以下内容:

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

这表明该软件包已成功上传. 然后,您可以导航到项目的” 程序包和注册表”页面,并查看上载的程序包.

如果您没有遵循上述指南,则需要确保已正确构建软件包,并使用 setuptools 创建了 PyPi 软件包 .

然后,您可以使用以下命令上传软件包:

  1. python -m twine upload --repository <source_name> dist/<package_file>

Where:

Install packages

使用以下命令安装最新版本的软件包:

  1. 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软件包,则可以运行以下命令:

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

这将导致以下结果:

  1. Looking in indexes: https://__token__:****@gitlab.com/api/v4/projects/<your_project_id>/packages/pypi/simple
  2. Collecting mypypipackage
  3. 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)
  4. Installing collected packages: mypypipackage
  5. Successfully installed mypypipackage-0.0.1