Artefak dist/ hasil Chapter Membangun Python Package bisa dipasang pip di komputer mana pun — tetapi hanya jika berkasnya sampai ke sana. Menempel berkas .whl di grup chat bukanlah distribusi; cara resminya adalah mengunggah package ke PyPI sehingga siapa pun bisa menjalankan pip install konverter-suhu. Pada chapter ini kita jalankan alur publikasi lengkap. Seluruh transkrip unggah pada chapter ini bersifat ilustratif — kita tidak benar-benar mengunggah apa pun, karena nama dan akun di PyPI milik pembuatnya sendiri.
Persiapan Sebelum Mengunggah #
Dua hal wajib dicek sebelum unggah pertama:
- Ketersediaan nama. Distribution name bersifat unik dan sekali dipakai dimiliki pemiliknya selamanya. Cari nama kita di kolom pencarian
pypi.org; jika sudah ada, ganti nama (misalnyakonverter-suhu-budi). Chapter Memahami Python Packages menjelaskan bahwa nama inilah yang dipakai padapip install, bukan import name. - Etika versioning. PyPI tidak pernah menimpa versi yang sudah ada — mengunggah
0.1.0kedua kali ditolak dengan galat, apa pun isinya. Setiap rilis wajib menaikkanversiondipyproject.toml, dan nomor versi sebaiknya mengikuti semantic versioning dari Chapter Dependency Pinning: naikkanPATCHuntuk perbaikan,MINORuntuk fitur baru,MAJORuntuk perubahan yang merusak.
Latihan di TestPyPI #
TestPyPI (test.pypi.org) adalah instance PyPI khusus latihan dengan basis data terpisah — package di sana tidak muncul di PyPI sungguhan. Alur lengkapnya:
- Buat akun di
test.pypi.org, lalu buat API token di halaman pengaturan akun dengan scope upload. Simpan token itu; contoh di sini memakai placeholderYOUR_TESTPYPI_TOKEN. - Simpan kredensial di
~/.pypircagar twine tidak menanyainya setiap kali unggah:
[distutils]
index-servers =
testpypi
[testpypi]
username = __token__
password = YOUR_TESTPYPI_TOKENPerhatikan nilainya: username bukan nama akun, melainkan teks khusus __token__, dan password adalah token itu sendiri.
- Unggah kedua artefak dari folder
dist/:
twine upload --repository testpypi dist/*Output yang Dihasilkan (ilustratif):
Uploading konverter_suhu-0.1.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━ 5.4/5.4 kB • 00:00:01 • 6.2 MB/s
Uploading konverter_suhu-0.1.0.tar.gz
100% ━━━━━━━━━━━━━━━━━━ 5.1/5.1 kB • 00:00:01 • 5.8 MB/s
View at:
https://test.pypi.org/project/konverter-suhu/0.1.0/- Uji hasilnya seperti pengguna sungguhan — memasang dari TestPyPI dengan
--index-url:
pip install --index-url https://test.pypi.org/simple/ konverter-suhuJika langkah keempat berhasil, kemasan kita valid dari sisi pengguna. Jika gagal (misalnya README tidak ter-render atau dependency tidak terpasang), perbaiki, naikkan versi, bangun ulang, lalu unggah lagi.
Unggah ke PyPI #
Alur untuk PyPI produksi (pypi.org) identik: buat akun, aktifkan two-factor authentication, buat API token scope upload, lalu unggah tanpa flag --repository:
twine upload dist/*Output yang Dihasilkan (ilustratif):
Uploading konverter_suhu-0.1.0-py3-none-any.whl
100% ━━━━━━━━━━━━━━━━━━ 5.4/5.4 kB • 00:00:01 • 6.4 MB/s
Uploading konverter_suhu-0.1.0.tar.gz
100% ━━━━━━━━━━━━━━━━━━ 5.1/5.1 kB • 00:00:00 • 5.9 MB/s
View at:
https://pypi.org/project/konverter-suhu/0.1.0/Mulai saat ini, siapa pun di dunia dapat menjalankan pip install konverter-suhu dan pip menemukannya di indeks default.
Setelah Terbit #
Rilis pertama baru separuh pekerjaan; pemeliharaan adalah separuh sisanya:
- Perbaikan diunggah sebagai versi baru — perbaiki kode, naikkan
version, jalankanpython -m build, lalutwine upload dist/*seperti biasa. - Versi bermasalah dapat di-yank dari halaman rilis di PyPI: versi bertanda yanked disembunyikan dari resolusi normal, tetapi tetap terpasang bagi yang memintanya eksak dengan
==versi. Opsi ini untuk rilis rusak, bukan pengganti menghapus — PyPI tidak menghapus berkas yang sudah terunggah. - Trusted Publishing adalah alternatif modern tanpa token: proyek open source yang dibangun lewat GitHub Actions dapat meminta PyPI memverifikasi unggahan langsung dari alur kerja tertentu, menghapus risiko token bocor sepenuhnya.
Dengan package terpublikasi, siklus pengelolaan dependency kita kini menutup lingkaran penuh: kita pernah menjadi pengguna PyPI, dan kini menjadi penyumbangnya.