DUICUO

Artipie: Python用のオープンソースリポジトリマネージャー

学生時代にPythonを使って開発していたとき、プライベートで集中管理されたストレージが必要だと気づきました。バイナリファイルやテキストデータファイル、そしてPythonパッケージを保存できるストレージです。その答えは、オープンソースのセルフホスト型ソフトウェアリポジトリマネージャーであるArtipieでした。

大学時代、同僚と私は実験測定から得た大量のデータを扱っていました。私はPythonを使ってデータを処理し、可視化していました。当時の同僚たちは数学者で、ソフトウェア開発の経験はありませんでした。彼らはたいていデータやコードをフラッシュドライブやメールで渡すだけでした。私は彼らにGitのようなバージョン管理システムを紹介しようとしましたが、うまくいきませんでした。

Pythonリポジトリ

ArtipieはPyPIリポジトリをサポートし、twineおよびpipと互換性があります。つまり、PyPIリポジトリやTestPyPIリポジトリにパッケージをインストールまたは配布するのと同じように、Artipie Pythonリポジトリを使用できます。

独自のPythonリポジトリを作成するには、Artipieがホストするインスタンス「Artipie Central」を利用できます。ログインすると、リポジトリの一覧ページ(最初は空です)と新しいリポジトリを追加するためのフォームが表示されます。新しいリポジトリの名前(例: ​mypython​ )を入力し、リポジトリの種類として​Python​を選択して、「追加」ボタンをクリックします。

次に、YAML 形式でリポジトリ設定を表示するページが表示されます。

 ----
リポジトリ:
タイプ: pypi
ストレージ: デフォルト
権限:
オレナゲラシモワ:
-アップロード
「*」
-ダウンロード

設定内の​type​マッピングはリポジトリの種類を設定します。この例では、Python リポジトリがデフォルトの Artipie Central ストアとして設定されています。

​storage​マップは、すべてのリポジトリパッケージの保存場所を定義します。任意のファイルシステムまたはS3ストレージ互換の場所を指定できます。Artipie Centralには、テストに使用できる事前設定済みの​default​ストレージが用意されています。

​permissions​マッピングにより、ユーザー​olenagerasimova​はアップロードでき、誰でも任意のパッケージをダウンロードできるようになります。

このリポジトリが存在し、動作していることを確認するには、ブラウザでインデックスページを開いてください。パッケージの一覧が表示されます。新しいリポジトリを作成したばかりで、まだパッケージをアップロードしていない場合は、リポジトリのインデックスページは空白になります。

バイナリリポジトリ

Artipieにはあらゆる種類のファイルを保存できます。保存タイプは​file​または​binary​のいずれかで、私は実験データの保存に「バイナリ」を使用しました。Pythonの視覚化の入力としてこれを使用しました。Artipie Centralでは、Pythonリポジトリと同様にファイルリポジトリを作成できます。名前を付けて​binary​タイプを選択し、「追加」ボタンをクリックします。

 ----
リポジトリ:
タイプ: ファイル
ストレージ: デフォルト
権限:
オレナゲラシモワ:
-アップロード
-ダウンロード
「*」
-ダウンロード

これらの設定は基本的にPythonと同じです。リポジトリの種類のみが異なります。この例では、バイナリリポジトリは​data​という名前です。このリポジトリには、数字が入った3つのテキストファイルが含まれています。

 6
3.5
5
4
4.5
3
2.7
5
6
3
1.2
3.2
6

他の2つのファイルは形式が同じです(番号のみ異なります)。これらのファイルをご自身で確認するには、ブラウザでリンク1、2、3を開いてファイルをダウンロードするか、 ​httpie​を使用してGETリクエストを実行してください。

 httpie -a https://central.artipie.com/olenagerasimova/data/y1.dat > ./data/y1.da

これらのファイルは、PUT リクエストを使用して Artipie Central の​data​リポジトリにアップロードされました。

 httpie -a olenagerasimova:*** PUT
https://central.artipie.com/olenagerasimova/data/y1.dat @data/y1.dat

httpie -a olenagerasimova:*** PUT
https://central.artipie.com/olenagerasimova/data/y2.dat @data/y2.dat

httpie -a olenagerasimova:*** PUT
https://central.artipie.com/olenagerasimova/data/y3.dat @data/y3.dat

このバイナリ リポジトリの API は非常にシンプル (HTTP ​PUT​および​GET​リクエスト) なので、必要なファイルをアップロードおよびダウンロードするためのコードを任意の言語で簡単に記述できます。

Pythonプロジェクト

Pythonプロジェクトのサンプルソースコードは、私のGitHubリポジトリから入手できます。この例の主なアイデアは、Artipie Centralから3つのデータファイルをダウンロードし、数値を配列に読み込み、それらの配列を使ってグラフをプロットすることです。pip ​pip​使ってサンプルパッケージをインストールし、実行してください。

 $ python3 -m pip インストール--index -url \
https://central.artipie.com/olenagerasimova/pypi/
pypiの例
$ python3 -m pypiexample

​--index-url​ Artipie Central Python リポジトリに設定すると、 ​pip​通常のデフォルトの PyPi リポジトリではなく、そこからパッケージをダウンロードします。これらのコマンドを実行すると、データファイルの視覚化として、3 本の曲線からなる極座標グラフが表示されます。

パッケージを Artipie Central リポジトリに公開するには、 ​twine​を使用してビルドしてアップロードします。

コマンドライン
$ python setup.py sdist bdist_wheel

$ twineアップロード--repository -url \
https://central.artipie.com/olenagerasimova/pypi
-uオレナゲラシモバ-p *** dist/*

Artipie Centralで​files​リポジトリを設定し、Pythonサンプルプロジェクトを作成するのは非常に簡単です。ただし、Artipie Centralを使用する必要はありません。Artipieはセルフホストなので、ご自身のローカルネットワーク上でリポジトリを実行できます。

Artipieをコンテナとして実行する

Artipie をコンテナとしてセットアップするのは、Podman や Docker をインストールするのと同じくらい簡単です。すでにどちらかがインストールされている場合は、ターミナルを開いてください。

 $ podman run -it -p 8080 :8080 -p 8086 :8086 artipie/artipie:latest

これにより、最新バージョンのArtipieを実行する新しいコンテナが起動します。また、2つのポートがマッピングされます。リポジトリはポート8080で提供されます。ArtipieのREST APIとSwaggerドキュメントはポート8086で提供されます。新しいイメージはデフォルト設定を生成し、実行中のリポジトリのリスト、テスト証明書、Swaggerドキュメントへのリンクをコンソールに出力します。

Artipie Rest API を使用して既存のリポジトリを表示することもできます。

  • Swagger ドキュメント ページに移動します​http://localhost:8086/api/index-org.html​
  • 「定義を選択」リストで、「認証トークン」を選択します。
  • パスワードが​artipie​であるユーザー​artipie​の認証トークンを生成してコピーします。
  • 「リポジトリ」定義に切り替えて、「承認」ボタンをクリックして、トークンを貼り付けます。

Swaggerドキュメントページの画像、

​/api/v1/repository/list​に GET リクエストを実行します。レスポンスには、3つのデフォルトリポジトリを含むJSONリストが返されます。

 [
「artipie/my-bin」
「artipie/my-docker」
「artipie/my-maven」
]

デフォルト設定にはPythonリポジトリが含まれていません。Swaggerインターフェースから​/api/v1/repository/{user}/{repo}​へのPUTリクエストを実行することで、これを修正できます。この場合、 ​user​はデフォルトユーザー( ​artipie​ )の名前、 ​repo​は新しいリポジトリの名前です。新しいPythonコードベースの名前は​my-pypi​とすることができます。以下は、リポジトリ設定を含むJSONオブジェクトを含むリクエスト本文の例です。

 {
「リポジトリ」 : {
「タイプ」 : 「pypi」
「ストレージ」「デフォルト」
「権限」 : {
「*」 :[
"ダウンロード"
],
「アーティピー」 : [
"アップロード"
]
}
}
}

すべてのJSONフィールドは、ダッシュボードでYAMLリポジトリを作成するときと同じです。リポジトリタイプは​pypi​で、デフォルトのストレージを使用しています。誰でもダウンロードできますが、アップロードできるのはユーザー​artipie​のみです。

リポジトリが作成されていることを確認するために、 ​/api/v1/repository/list​にもう一度 GET リクエストを送信します。これでリポジトリが 4 つ作成されました。

 [
「artipie/my-bin」
「artipie/my-docker」
「artipie/my-maven」
「artipie/my-pypi
]

複数のリポジトリを備えた独自のArtipieインストールを作成しました!Artipieミラーは、個人のパソコンでも、プライベートネットワーク内のリモートサーバーでも実行できます。企業、グループ、大学内でソフトウェアパッケージを交換するのにも使えます。これは、独自のソフトウェアサービスを構築する簡単な方法であり、Pythonだけに限定されません。Artipieを実際に試してみて、その可能性を確かめてみてください。