すべてのプライベートパッケージを1か所でアクセスできるようにします
このGitHubホストのPypiインデックスを使用して
説明•試してみてください! •開始します•インデックス付きパッケージの変更•FAQ•サプライチェーン攻撃についての言葉•貢献•参照
このリポジトリは、PEP503に準拠したPYPIインデックスとして使用されるGitHubページです。
これを使用して、すべてのパッケージを1つの場所にグループ化し、 pipを介して簡単にアクセスできます。
PYPIインデックスはパブリックですが、ここにインデックスされたプライベートパッケージはプライベートに保たれます。GITHUB認証を取得できるようにする必要があります。
astariul.github.io/ github-hosted-pypi/にアクセスして、そこにインデックス付きのパッケージをインストールしてみてください!
パッケージをインストールしてみてくださいpublic-hello :
pip install public-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/また、自動的にパッケージのmydependencyをインストールします!
試してみてください:
from public_hello import hi
print ( hi ())特定のバージョンをインストールすることもできます。
pip install public-hello==0.1 --extra-index-url https://astariul.github.io/github-hosted-pypi/ここで、パッケージprivate-helloをインストールしてみてください:
pip install private-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/それは私的であり、私だけがそれにアクセスできるので、それは機能しません!
Settingsに移動し、githubページを有効にしますindex.htmlとpkg_template.html好みに合わせてカスタマイズします<user>.github.io/<repo_name>にアクセスして、PYPIインデックスを確認してくださいPYPIインデックスがセットアップされたので、インデックス付きパッケージを登録 /更新 /削除できます。
GitHubアクションは、自動的に実行するように設定されています。
あなたはただしなければなりません:
Actionsタブに移動しますregister / update / delete )をクリックし、手動でトリガーしますご存知かもしれませんが、 pip install git+<repo_link>フォームに与えられた場合、 pip GitHub-Hostedパッケージをインストールできます。このPYPIインデックスは、他のGitHubリポジトリへのリンクのインデックスにすぎません。
GitHubページは公開されているため、このPypiインデックスは公開されています。ただし、他のGitHubリポジトリへのリンクを含めるだけで、このPypiインデックスにはコードがホストされていません。
リポジトリホスティングコードがプライベートである場合、GitHubで認証する必要があります。
サプライチェーン攻撃についてもっと具体的に疑問に思うなら、それについてセクションを確認してください!
pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ 、次のことが起こります。
pip 、指定された名前のパッケージを見つけようとするデフォルトのパブリックインデックスであるhttps://pypi.org/を見ます。https://astariul.github.io/github-hosted-pypi/を確認します。pip ( git+<repo_link>@<tag> )に返されます。pipそれがGitHubリポジトリであることを理解しており、リポジトリ(特定のタグで)をローカルにクローン化します。pipパッケージをインストールします。pip 、同じ手順で欠落している依存関係をインストールします。認証は、リポジトリをクローニングするステップ4で発生します。
単一のベストプラクティスは、GitHubリリースを使用することです。これにより、パッケージに特定のタグで紹介されたバージョンを持つことができます。
これを行うには:
pip install git+<repo_link>@<tag>git+<repo_link>@<tag> )を置きます。 インデックス付きパッケージの別の名前を指定できます。登録するときは、フォームに別の名前を付けるだけです。
たとえば、 tensorflowという名前のプライベートパッケージがある場合、このインデックスに登録すると、 my_cool_tensorflowという名前を付けることができます。そのため、パブリックパッケージtensorflowには名前の衝突がありません。
次に、 pip install my_cool_tensorflow --extra-index-url https://astariul.github.io/github-hosted-pypi/でインストールできます。
その後、 pythonから、あなただけができます:
import tensorflowしかし、これには注意してください!このように処理することは可能ですが、混乱を避けるためだけでなくセキュリティのために、パッケージのユニークな名前を持っている方が常に良いです!
Docker画像の構築はインタラクティブではないため、ユーザー名とパスワードを入力するプロンプトはありません。
代わりに、GitHubの資格情報を.netrcファイルに配置する必要があります。これにより、 pip GitHubからクローニングするときに認証できるようにします。
これをDockerでしっかりと行うには、Dockerの秘密を使用する必要があります。ここに、方法に関する簡単なチュートリアルがあります。
ステップ1 :秘密ファイルに資格情報を保存します。この例に従ってください:
machine github.com
login <gh_user>
password <gh_pass>
nであることを確認してください。
タブをスペースに置き換えるIDEを使用している場合、またはWindowsにいる場合(ラインエンディングがrn )場合は注意してください!
このファイルgh_auth.txtに名前を付けましょう。
ステップ2 :Dockerファイルを作成します。 Dockerファイルでは、secretファイルを.netrcにマウントし、認証が必要な場所でコマンドを実行する必要があります。例えば :
# syntax=docker/dockerfile:experimental
FROM python:3
RUN --mount=type=secret,id=gh_auth,dst=/root/.netrc pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ステップ3 :Docker画像を作成し、ステップ1で作成された秘密の場所を指定します。
sudo DOCKER_BUILDKIT=1 docker build --secret id=gh_auth,src=./gh_auth.txt .
このFAQを改善するための質問やアイデアがある場合は、PR /空白の問題を開いてください!
前に見たように、このGitHubホストのPypiインデックスは--extra-index-url pip機能に依存しています。この機能の仕組みにより、サプライチェーン攻撃に対して脆弱です。
たとえば、Private Pypiインデックスでホストされているfbi_packageバージョン2.8.3という名前のパッケージがあるとしましょう。
攻撃者は、同じ名前とより高いバージョン(たとえば99.0.0 )を持つ悪意のあるパッケージを作成できます。
pip install fbi_package --extra-index-url my_pypi_index.com実行すると、Hood pipの下には、最新バージョンのパッケージがダウンロードされます。これは悪意のあるパッケージです。
このリポジトリは独自のPYPIインデックスを持つことを非常に便利にしますが、ページが公開されていることに注意してください。したがって、誰でも使用しているパッケージ名を確認し、この同じ名前で悪意のあるパッケージを作成できます...
そのため、このプライベートPYPIインデックスに自動チェックを含めました。パッケージのページにアクセスするたびに、Pypi APIが呼び出され、同じ名前とより高いバージョンのパッケージが見つかった場合、インストールコマンドは警告に置き換えられます。
https://astariul.github.io/github-hosted-pypi/transformers/でこのような警告のデモを見ることができます。
この警告が表示されている場合は、パッケージをインストールしないでください!代わりに、パッケージの名前を変更するか、バージョンを公開対象の上にアップグレードします。
そこに注意してください!
問題とPRは大歓迎です!
奇妙なものに出くわした場合 /それが改善される可能性がある場合は、連絡してください!
これは、このリポジトリから大きなインスピレーションを受けています。
これは単なる栄光のバージョンで、クリーンなページと、インデックスからパッケージを簡単に追加、更新、削除するためのgithubアクションがあります。
元の著者のブログ投稿もチェックしてください!
ページで使用されているアイコンは、FlaticonのFreepikによって作成されました