Rye: Pengalaman Python tanpa kerumitan
(rye.astral.sh)- Rye adalah alat manajemen proyek dan paket yang ditujukan untuk menangani instalasi Python, proyek
pyproject.toml, dependensi, virtualenv, dan instalasi alat global di satu tempat - Saat ini pengembangannya telah dihentikan, dan penggunaan uv, proyek penerus yang dibuat oleh para maintainer yang sama, direkomendasikan
- Pengguna lama dapat bermigrasi dengan merujuk ke uv migration guide, dan meskipun Rye masih bisa diunduh, tidak ada rencana pembaruan lebih lanjut
- Penghentian pembaruan ini juga mencakup pembaruan keamanan, sehingga untuk proyek baru atau lingkungan pemeliharaan jangka panjang, perlu mempertimbangkan beralih ke uv
- Pengalaman Python terintegrasi yang dituju Rye mencakup proyek kompleks hingga monorepo, tetapi fokus pemeliharaan kini telah berpindah ke uv
Status Rye saat ini
-
Penghentian pengembangan dan rekomendasi uv
- Semua pengguna direkomendasikan untuk menggunakan uv
- uv adalah proyek penerus yang dibuat oleh para maintainer yang sama
- uv dikelola secara aktif dan digunakan jauh lebih luas dibandingkan Rye
- Pengguna Rye yang sudah ada dapat merujuk ke uv migration guide
- Rye masih dapat digunakan, tetapi tidak ada rencana pembaruan tambahan
- Tidak ada rencana untuk pembaruan keamanan juga
Fitur yang disediakan Rye
- Rye adalah solusi manajemen proyek dan paket untuk Python
- Dibuat dengan tujuan menjadi alat serba ada bagi pengguna Python
- Dalam satu pengalaman terintegrasi, alat ini menangani pekerjaan berikut
- Manajemen instalasi Python
- Manajemen proyek berbasis
pyproject.toml - Manajemen dependensi
- Manajemen virtualenv
- Instalasi alat global
- Dirancang agar dapat menangani proyek kompleks dan monorepo
- Video pengantar dapat ditonton di Watch an introduction
2 komentar
Sudah agak lama, tetapi setelah mencoba ini-itu,
saya menggunakan
Introduction - PDM
.
Sepertinya saya juga harus mencoba menggunakan Rye.
Komentar di Hacker News
Sebagian besar pengembangan packaging inti kini berlangsung di uv, dan Rye menggunakan uv secara internal, jadi ketika uv membaik, Rye juga ikut membaik
Misalnya, baru-baru ini uv menambahkan resolusi dependensi universal, sehingga kini bisa membuat
requirements.txtterkunci dengan satu hasil resolusi yang berjalan di semua platform dan sistem operasi, bukan hanya sistem yang sedang dijalankan, dan Rye terbaru juga mendukungnyahttps://github.com/astral-sh/uv
Karena saya mengembangkan Rye dan uv, kalau ada pertanyaan saya bisa menjawabnya
https://github.com/python-poetry/poetry/issues/6409
https://news.ycombinator.com/item?id=39257501
Salah satu alasan tim saya masih ragu untuk pindah adalah bagian ini. Karena kami mengerjakan ML, jika mengambil proyek berbasis PyTorch sebagai contoh, kondisi yang kami inginkan adalah menaruh semua dependensi di
pyproject.tomllalu dari Mac AArch64 atau workstation Windows AMD64 dapat membuat lock file untuk konfigurasi platform berikut: Mac yang memakai PyTorch MPS bawaan, Windows yang memakai PyTorch CUDA, Linux AArch64 yang memakai PyTorch CPU, Linux AMD64 yang memakai PyTorch CPU, dan Linux AMD64 yang memakai PyTorch CUDATerima kasih sudah membuat Ruff; kami sangat puas baik dengan linting maupun formatting-nya
pyenv+venv+pipselalu menyakitkan, tetapi sekarang saya sudah pindah ke RyeSekarang cukup instal Rye, ambil dari GitHub, ketik
rye sync, selesaihttps://guac.sh/
https://pypi.org/project/sbom4python/ https://github.com/CycloneDX/cyclonedx-python
Berkat fitur pelepasan pin dependensi yang baru ditambahkan, selama pengembangan kita bisa didorong untuk menjaga kompatibilitas, lalu menghasilkan
requirements.txtyang akurat dan eksplisit demi reproduksibilitas, sehingga pengelolaan kerentanan dan tahap SBOM menjadi jauh lebih mudah dibandingkan alat seperti PoetryKarena alasan serupa saya memakai https://hatch.pypa.io/latest/why/, dan saya juga suka karena cocok dengan
uvHal yang membuat saya enggan terhadap Rye adalah bagian yang sangat menganjurkan penggunaan build Python nonstandar
Halaman filosofinya (https://rye.astral.sh/philosophy/) menjelaskan bahwa build CPython dari python.org sama sekali tidak memadai; tergantung platform hanya ada installer
.msiatau hanya tarball; dan berbagai distribusi Python sangat bercabang sehingga menimbulkan segala macam masalah di ekosistem turunannya. Karena itu proyek ini memakai build standalone indygreg, dan berharap suatu hari ada build Python yang dikelola dengan baik dan tepercaya untuk menggantikan kekacauan saat iniInformasi tentang build indygreg itu ada di https://gregoryszorc.com/docs/python-build-standalone/main/, dan memilih Python lain juga dimungkinkan: https://rye.astral.sh/guide/toolchains/
Namun saya hampir tidak pernah mengalami masalah yang mereka sebutkan. Build Python resmi yang saya dapat dari python.org berjalan, Python biasa yang dipasang lewat package manager distro juga berjalan, dan Python yang disertakan dalam image container Docker resmi juga berjalan
Build khusus itu mungkin juga berjalan baik, tetapi ketidakstandarannya membuat saya ragu. Bahkan ada daftar keanehan perilaku; saya tidak paham mengapa menambahkan keanehan pada sesuatu yang tidak bermasalah. Filosofi Rye yang terlalu agresif dalam memakai build tersebut juga membuatnya kurang menarik dibandingkan alternatif yang secara default memakai Python yang sudah ada di sistem operasi
Untuk membangun Python dari source diperlukan dependensi sistem baru, memakan waktu lama, dan pada akhirnya muncul error yang lebih tidak jelas tentang file header yang hilang. Saat mencari error itu, Anda menemukan flag
./configureuntuk mengakali masalah yang sudah diperbaiki upstream GCC pada 2017, dan akhirnya memang berhasilJika Anda belum pernah mengalami tiga jenis error seperti ini atau lingkungan build manylinux, berarti Anda telah sepenuhnya terhindar dari dunia penderitaan. Hal yang sama juga berlaku untuk scripting instalasi Windows atau bagian seperti “pembatasan instruksi CPU yang tersedia” di halaman itu
Mengunduh kode sumber Python secara berkala, mengompilasinya dengan optimasi produksi standar, lalu memasangnya di
/use/local/python${version}; sejak Python 3.7 dirilis pada 2018, ini berjalan sangat konsistenBerdasarkan pengalaman saya, perintah-perintah ini begitu stabil dan konsisten sampai layak diotomatisasi. Saya penasaran bagian mana yang dipersoalkan penulis, atau apa keberatan mendasarnya
Misalnya, berkas instalasi Python 3.10.14 tidak bisa diunduh, dan berkas instalasi Windows terakhir adalah Python 3.10.11, versi 5 April 2023
Saya suka Rye. Ia melakukan persis apa yang dijanjikannya, benar-benar membuat seluruh proses
venv/versi Python/packaging terasa nyaman, dan bagi orang yang akrab dengan cara penggunaan Python resmi sepertipyproject.toml, rasanya hampir transparanSelain itu, ia membuat Python terasa seperti Cargo, dan Cargo juga alat yang enak dipakai
Secara pribadi, saya melihat pip-tools memiliki desain yang jauh lebih baik daripada Poetry atau Pipenv. Ia ortogonal terhadap pip maupun
virtualenv, karena keduanya sudah lama menjadi alur yang termasuk dalam Python. Rye bisa dilihat sebagai bukti bahwa pendekatan patuh standar yang terus diperbaiki akhirnya menangSelain peningkatan kecepatan berkat Rust, saya suka karena ia memberi default yang tepat tentang di mana menaruh virtual environment (
.venv) dan bagaimana memasang beberapa versi Python. Kelihatannya kecil, tetapi setelah wheel menyelesaikan masalah instalasi numpy, default yang masuk akal seperti ini dan pip-tools bawaan pada dasarnya adalah semua yang masih kurang. Dalam arti itu, saya juga penasaran apa alasan keberadaan Anaconda setelah binary wheel munculSenang melihatnya akhirnya membaik
Rasanya package manager Python lebih banyak daripada aplikasi chat Google
Dan dari sisi kurasi, saran untuk memercayai organisasi kecil dibanding organisasi yang lebih besar dan lebih lama tampak sulit meyakinkan. Jadi saya penasaran apa sebenarnya hal yang dijanjikannya. Yang bisa saya baca kira-kira hanya “package manager yang bagus itu bagus, cepat, dan bagus”, jadi akan menyenangkan kalau ada halaman perbandingan atau filosofi
Sinisme di HN kadang mengejutkan
Saya suka Rye. Setelah memakai package manager bahasa lain seperti Cargo atau Hex, saya selalu merasa sayang Python tidak punya sistem serupa, dan Rye benar-benar mengobati rasa haus itu. Dari sudut pandang saya yang tidak ingin memasang banyak alat untuk mengelola
venv, versi Python, dan dependensi proyek, sangat menyenangkan karena Rye saja bisa menangani semuanyaSaya belum begitu paham Rye, tetapi conda juga bisa mengelola
venv, versi Python, dan dependensi proyek dengan baikBertemu dependency manager Python baru rasanya seperti tanpa sengaja menemukan framework JavaScript baru
venvsajaKalau harus berurusan dengan port, harus mendistribusikan program, atau library bergantung pada C atau komponen sistem operasi, lebih baik mulai pekerjaan konsultasi berbayar di mana setelah dibayar Anda tidak perlu mengelola codebase atau bertanggung jawab atasnya
Sekarang CUDA dan PyTorch juga bisa dijalankan di Docker. Dalam thread seperti ini, ketika seseorang berkata “pakai Docker saja”, jawaban yang sering muncul adalah “saya tidak mau belajar Docker”, padahal meski sama sekali tidak punya pengalaman Docker, menyalakan container Python hanya butuh 10 menit
pixi(https://pixi.sh/latest/) bagus. Bisa mengunci versi Python dan memasang paket dari conda maupun PyPI, serta ditulis dengan Rust
curllalu mem-pipe ke bash, kemudianevalpada output perintah arbitrer terasa memberatkanLatar belakangnya agak rumit. Perusahaan Anaconda punya conda yang ditulis dengan Python, dan ekosistem open source conda-forge adalah channel conda dengan bot build CI. Setelah itu, di bawah payung conda-forge yang sama, mamba yang ditulis dengan C++ muncul sebagai pengganti conda, dan ini adalah pengganti drop-in sungguhan sampai level
alias conda=mambaseharusnya berfungsi. Sekarang conda juga memakai libmamba sebagai resolver untuk meningkatkan kecepatanKemudian penulis mamba memisahkannya menjadi pixi, menulis ulang dengan Rust, dan mengubah filosofi tentang lokasi environment serta cara aktivasi, tetapi tetap sepenuhnya kompatibel dengan environment conda
conda selalu mendukung instalasi paket PyPI melalui
pipketika paket tersebut tidak ada di channel conda, dan pixi mendukung paket PyPI melalui uv. Karena itu pixi cepat. Menurut artikel blognya, ada juga optimisasi lain yang membuatnya jauh lebih cepat daripada mambaJika memakai paket yang bukan Python murni, keluarga conda adalah pilihan yang tepat. Pilihan manajer paket (conda/mamba/pixi) bersifat sekunder
Masalah PyPI adalah kurangnya peran penjaga gerbang. Ditambah lagi kurangnya cara standar untuk memaketkan paket yang bukan Python murni, sehingga environment bisa bocor, atau menjadi tidak dapat direproduksi terutama ketika hanya mendistribusikan source lalu melakukan hal aneh seperti mem-bootstrap environment di
setup.pysampai menyertakan compilerDi sisi conda, channel conda-forge melakukan kontrol kualitas yang cukup baik. Mereka memeriksa constraint, lisensi, masalah file lisensi yang hilang dari distribusi PyPI, isolasi environment, dan sebagainya. Tentu saja tidak sempurna, karena maintainer bisa menggunakan bot resmi yang otomatis me-merge perubahan PyPI dengan constraint versi yang salah
Masalah yang saat ini belum bisa diselesaikan oleh alat mana pun berpusat pada PyPI. Kita harus menangani paket yang tidak ada di conda, dan rilis paket pada praktiknya juga dipaksa dilakukan terlebih dahulu ke PyPI
Bahkan saat menginstal paket yang hanya ada di PyPI melalui conda, sebagian dependensinya bisa saja ada di conda. Sejauh yang saya tahu, tidak ada manajer paket yang memakai paket conda untuk memenuhi dependensi paket PyPI. Kita bisa menambahkan paket conda secara manual untuk mencocokkan dependensi, tetapi ada risiko tidak mendapatkan constraint versi yang benar
Saat menulis paket Python open source pun, meski konfigurasinya hanya bergantung pada channel conda, kebanyakan harus atau sebaiknya dirilis terlebih dahulu ke PyPI. Ini karena rilis channel conda-forge pada praktiknya mengharuskan keberadaan di PyPI. Jadi bagi orang seperti saya pun, Rye masih bisa berguna dan layak dicoba
Proyek ini sangat menjanjikan, tetapi saya berencana menunggu sampai mencapai tahap yang lebih matang. Saya menyukai semua hal lain yang dibuat tim Astral, jadi ekspektasinya tinggi
Setiap kali memulai proyek Python, rasanya harus mempelajari lagi kondisi terbaru pengelolaan dependensi/virtual environment