Jadikan semua paket pribadi Anda dapat diakses di satu tempat
dengan indeks PYPI yang di-host gitub ini
Deskripsi • Coba! • Mulailah • Modifikasi Paket yang Diindeks • FAQ • Kata tentang Serangan Rantai Pasokan • Kontribusi • Referensi
Repositori ini adalah halaman GitHub yang digunakan sebagai indeks PYPI, sesuai dengan PEP503.
Anda dapat menggunakannya untuk mengelompokkan semua paket Anda di satu tempat, dan mengaksesnya dengan mudah melalui pip , hampir seperti paket lain yang tersedia untuk umum!
Sementara indeks PYPI bersifat publik, paket pribadi yang diindeks di sini dirahasiakan: Anda akan memerlukan otentikasi GitHub untuk dapat mengambilnya.
Kunjungi astariul.github.io/github-hosted-pypi/ dan cobalah untuk menginstal paket yang diindeks di sana!
Cobalah untuk menginstal paket public-hello :
pip install public-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/ Ini juga akan menginstal paket mydependency , secara otomatis!
Cobalah dengan:
from public_hello import hi
print ( hi ())Anda juga dapat menginstal versi tertentu:
pip install public-hello==0.1 --extra-index-url https://astariul.github.io/github-hosted-pypi/ Sekarang cobalah untuk menginstal paket private-hello :
pip install private-hello --extra-index-url https://astariul.github.io/github-hosted-pypi/Ini tidak akan berhasil, karena itu pribadi dan hanya saya yang dapat mengaksesnya!
Settings Repositori Anda, dan Aktifkan Halaman GitHubindex.html dan pkg_template.html sesuai keinginan Anda<user>.github.io/<repo_name> untuk melihat indeks PYPI Anda Sekarang indeks PYPI Anda diatur, Anda dapat mendaftar / memperbarui / menghapus paket yang diindeks.
Tindakan GitHub diatur untuk melakukannya secara otomatis untuk Anda.
Anda hanya perlu:
Actions Repositori Andaregister / update / delete ) dan picu secara manual Seperti yang Anda ketahui, pip dapat menginstal paket github-host jika diberikan dalam bentuk pip install git+<repo_link> . Indeks PYPI ini hanyalah indeks tautan ke repositori GitHub lainnya.
Halaman GitHub bersifat publik, jadi indeks PYPI ini bersifat publik. Tapi itu hanya berisi tautan ke repositori github lainnya, tidak ada kode yang di -host pada indeks PYPI ini!
Jika kode hosting repositori bersifat pribadi, Anda harus mengotentikasi dengan GitHub untuk dapat mengkloningnya, secara efektif menjadikannya pribadi.
Jika Anda bertanya -tanya lebih khusus tentang serangan rantai pasokan, periksa bagiannya!
Saat menjalankan pip install <package_name> --extra-index-url https://astariul.github.io/github-hosted-pypi/ , berikut ini terjadi:
pip akan melihat https://pypi.org/ , default, indeks publik, mencoba menemukan paket dengan nama yang ditentukan.https://astariul.github.io/github-hosted-pypi/ .pip ( git+<repo_link>@<tag> ).pip mengerti itu adalah repositori GitHub dan akan mengkloning repositori (pada tag tertentu) secara lokal.pip instal paket.pip Pasang ketergantungan yang hilang dengan langkah yang sama.Otentikasi terjadi pada langkah 4, saat mengkloning repositori.
Praktik terbaik tunggal adalah menggunakan rilis GitHub. Ini memungkinkan paket Anda memiliki versi yang dirujuk oleh tag tertentu.
Untuk melakukan ini:
pip install git+<repo_link>@<tag>git+<repo_link>@<tag> ). Anda hanya dapat menentukan nama yang berbeda untuk paket yang diindeks Anda. Berikan saja nama yang berbeda dalam formulir saat mendaftarkannya.
Misalnya jika Anda memiliki paket pribadi bernama tensorflow , ketika Anda mendaftarkannya dalam indeks ini, Anda dapat menamainya my_cool_tensorflow , jadi tidak ada penagihan nama dengan paket publik tensorflow .
Kemudian Anda dapat menginstalnya dengan pip install my_cool_tensorflow --extra-index-url https://astariul.github.io/github-hosted-pypi/ .
Kemudian dari python , Anda bisa melakukan:
import tensorflowTapi hati -hati tentang ini! Meskipun mungkin untuk menanganinya seperti ini, selalu lebih baik memiliki nama unik untuk paket Anda, untuk menghindari kebingungan tetapi juga untuk keamanan!
Membangun gambar Docker tidak interaktif, jadi tidak ada prompt untuk mengetik nama pengguna dan kata sandi.
Sebagai gantinya, Anda harus memasukkan kredensial github Anda di file .netrc , sehingga pip dapat mengautentikasi saat mengkloning dari GitHub.
Untuk melakukan ini dengan aman di Docker, Anda harus menggunakan rahasia Docker. Berikut adalah tutorial singkat tentang cara melakukannya:
Langkah 1 : Simpan kredensial Anda dalam file rahasia. Ikuti contoh ini:
machine github.com
login <gh_user>
password <gh_pass>
n .
Jadi berhati -hati jika Anda menggunakan IDE yang menggantikan tab dengan spasi atau jika Anda berada di windows (di mana ujung garis rn )!
Mari kita beri nama file ini gh_auth.txt .
Langkah 2 : Buat file Docker Anda. Di file Docker Anda harus memasang file rahasia di .netrc , dan jalankan perintah tempat Anda membutuhkan otentikasi. Misalnya :
# 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/Langkah 3 : Bangun gambar Docker Anda, menentukan lokasi rahasia yang dibuat pada Langkah 1:
sudo DOCKER_BUILDKIT=1 docker build --secret id=gh_auth,src=./gh_auth.txt .
Jika Anda memiliki pertanyaan atau ide untuk meningkatkan FAQ ini, buka masalah PR / kosong!
Seperti yang Anda lihat sebelumnya, indeks PYPI yang diselenggarakan oleh GitHub ini bergantung pada fitur pip --extra-index-url . Karena cara kerja fitur ini, rentan terhadap serangan rantai pasokan.
Misalnya, katakanlah Anda memiliki paket bernama fbi_package versi 2.8.3 yang di -host pada indeks PYPI pribadi Anda.
Seorang penyerang dapat membuat paket berbahaya dengan nama yang sama dan versi yang lebih tinggi (misalnya 99.0.0 ).
Saat Anda menjalankan pip install fbi_package --extra-index-url my_pypi_index.com , di bawah Hood pip akan mengunduh versi terbaru dari paket tersebut, yang merupakan paket berbahaya!
Meskipun repositori ini membuatnya sangat nyaman untuk memiliki indeks PYPI Anda sendiri, ketahuilah bahwa halaman tersebut bersifat publik, oleh karena itu siapa pun dapat melihat nama paket mana yang Anda gunakan dan membuat paket berbahaya dengan nama yang sama ...
Itu sebabnya kami memasukkan cek otomatis ke dalam indeks PYPI pribadi ini. Setiap kali Anda mengakses halaman paket Anda, PYPI API dipanggil, dan jika paket dengan nama yang sama dan versi yang lebih tinggi ditemukan, perintah instalasi diganti dengan peringatan.
Anda dapat melihat demo peringatan semacam itu di https://astariul.github.io/github-hosted-pypi/transformers/.
Jika Anda melihat peringatan ini, jangan instal paket! Sebagai gantinya, ubah nama paket Anda atau tingkatkan versi di atas mitra publiknya.
Hati -hati di luar sana!
Masalah dan PR dipersilakan!
Jika Anda menemukan sesuatu yang aneh / itu bisa ditingkatkan, silakan menghubungi!
Ini sangat terinspirasi dari repositori ini.
Ini hanya versi yang dimuliakan, dengan halaman yang lebih bersih dan tindakan github untuk dengan mudah menambah, memperbarui, dan menghapus paket dari indeks Anda.
Periksa juga posting blog dari penulis asli!
Ikon yang digunakan dalam halaman dibuat oleh Freepik dari Flaticon