GitLab PyPiリポジトリ
GitLab Premium12.10 で導入されました。
GitLab PyPiリポジトリを使えば、すべてのプロジェクトがPyPiパッケージを保存するための独自のスペースを持つことができます。
GitLabのPyPiリポジトリは次のように動作します:
開発者の環境設定
PyPiリポジトリの有効化
PyPi リポジトリを有効にすると、デフォルトですべての新規プロジェクトで利用できるようになります。 既存のプロジェクトで有効にする場合、または無効にする場合は、以下の手順に従います:
- プロジェクトの[設定]>[一般]>[権限]に移動します。
- パッケージ機能を検索し、有効または無効にします。
- 変更を有効にするには、[変更を保存]をクリックします。
左サイドバーに「パッケージ&レジストリ」セクションが表示されます。
利用を開始
このセクションでは、アップロードする 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>
どこで
-
<package_file>
はパッケージのファイル名で、.tar.gz
または.whl
で終わります。 -
<source_name>
は、セットアップ時に使用されるソース名です。
パッケージのインストール
以下のコマンドを使用して、最新バージョンのパッケージをインストールしてください:
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