GitLab PyPiリポジトリ

GitLab Premium12.10 で導入されました

GitLab PyPiリポジトリを使えば、すべてのプロジェクトがPyPiパッケージを保存するための独自のスペースを持つことができます。

GitLabのPyPiリポジトリは次のように動作します:

開発者の環境設定

最新のバージョンのpipと twineが必要です。

PyPiリポジトリの有効化

Note:このオプションは、GitLab管理者がパッケージレジストリのサポートを有効にしている場合にのみ利用できます。

PyPi リポジトリを有効にすると、デフォルトですべての新規プロジェクトで利用できるようになります。 既存のプロジェクトで有効にする場合、または無効にする場合は、以下の手順に従います:

  1. プロジェクトの[設定]>[一般]>[権限]に移動します。
  2. パッケージ機能を検索し、有効または無効にします。
  3. 変更を有効にするには、[変更を保存]をクリックします。

左サイドバーに「パッケージ&レジストリ」セクションが表示されます。

利用を開始

このセクションでは、アップロードする PyPi パッケージのサンプルを新しく作成する方法を説明します。 これは GitLabPyPiレジストリを試すためのクイックスタートです。 すでに独自のパッケージをビルドして公開する方法を理解している場合は、次のセクションに進んでください。

プロジェクトの作成

完全な Python プロジェクトの作成方法を理解することはこのガイドの範囲外ですが、レジストリをテストするための小さなパッケージを作成することはできます。MyPyPiPackageという新しいディレクトリを作成することから始めます:

mkdir MyPyPiPackage && cd MyPyPiPackage

このディレクトリを作成したら、その中に別のディレクトリを作成します:

mkdir mypypipackage && cd mypypipackage

このディレクトリの中に2つの新しいファイルを作成し、基本プロジェクトをセットアップします:

touch __init__.py
touch greet.py

greet.pyの内部に、以下のコードを追加します:

def SayHello():
    print("Hello from MyPyPiPackage")
    return

__init__.py 、ファイル内部に以下を追加します:

from .greet import SayHello

プロジェクトの基本が完成したので、コードが実行されるかテストしてみましょう。 PythonプロンプトをトップMyPyPiPackage ディレクトリ内で起動します。 そして実行します:

>>> 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

サンプルプロジェクトが上記のように動作することを確認したら、次にパッケージを作成します。

パッケージの作成

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 パッケージレジストリにアップロードする準備ができました。 その前に、次に認証を設定する必要があります。

GitLab PyPiリポジトリをソースとして追加します。

個人アクセストークンによる認証

以下のものが必要です:

  • 個人アクセストークン。リポジトリ認証のスコープを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>

デプロイトークンによる認証

以下のものが必要です:

  • デプロイトークン。リポジトリ認証のために、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>

パッケージのアップロード

パッケージをアップロードする際は、以下の点に注意してください:

  • 最大許容サイズは50メガバイトです。
  • 同じパッケージを同じバージョンで複数回アップロードした場合、連続したアップロードはそれぞれ別のファイルとして保存されます。 パッケージをインストールするとき、GitLabは最新のファイルを提供します。

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>

どこで

パッケージのインストール

以下のコマンドを使用して、最新バージョンのパッケージをインストールしてください:

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

どこで

  • <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