GitLab Package Registry#
You can also publish your distribution packages in the package registry of your GitLab project and use them with both Pip and twine.
Authentication#
To authenticate to the GitLab Package Registry, you can use one of the following methods:
A personal access token with the scope
api
.A deploy token with the scopes
read_package_registry
,write_package_registry
or both.
… with a personal access token#
To authenticate yourself with a personal access token, you can add the following
to the ~/.pypirc
file, for example:
[distutils]
index-servers=
gitlab
[gitlab]
repository = https://ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi
username = {NAME}
password = {YOUR_PERSONAL_ACCESS_TOKEN}
… with a deploy token#
[distutils]
index-servers =
gitlab
[gitlab]
repository = https://ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi
username = {DEPLOY_TOKEN_USERNAME}
password = {DEPLOY_TOKEN}
… with a job token#
image: python:latest
run:
script:
- pip install build twine
- python -m build
- TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*
… for access to packages within a group#
Use the GROUP_URL
instead of the PROJECT_ID
.
Publishing the distribution package#
You can publish your package with the help of twine:
python3 -m twine upload --repository gitlab dist/*
Note
If you try to publish a package that already exists with the same name and
version, you will get the error 400 Bad Request
; you will have to delete
the existing package first.
Installing the package#
You can install the latest version of your package for example with
pip install --index-url https://{NAME}:{PERSONAL_ACCESS_TOKEN}@ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi/simple --no-deps {PACKAGE_NAME}
… or from the group level with
pip install --index-url https://{NAME}:{PERSONAL_ACCESS_TOKEN}@ce.cusy.io/api/v4/groups/{GROUP_ID}/-/packages/pypi/simple --no-deps {PACKAGE_NAME}
… or in the requirements.txt
file with
--extra-index-url https://ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi/simple {PACKAGE_NAME}