|
学生時代に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を実際に試してみて、その可能性を確かめてみてください。 |