Di muka itu, tampaknya itu requirements.txtdansetup.py merupakan duplikat yang konyol, tetapi penting untuk dipahami bahwa walaupun bentuknya serupa, fungsi yang dimaksud sangat berbeda.
Tujuan dari pembuat paket, ketika menentukan dependensi, adalah untuk mengatakan "di mana pun Anda menginstal paket ini, ini adalah paket lain yang Anda butuhkan, agar paket ini berfungsi."
Sebaliknya, penulis penyebaran (yang mungkin orang yang sama pada waktu yang berbeda) memiliki pekerjaan yang berbeda, di mana mereka mengatakan "inilah daftar paket yang telah kami kumpulkan dan uji coba dan sekarang saya perlu menginstal".
Penulis paket menulis untuk berbagai skenario, karena mereka meletakkan pekerjaan mereka di luar sana untuk digunakan dengan cara yang mungkin tidak mereka ketahui, dan tidak memiliki cara untuk mengetahui paket apa yang akan diinstal bersama paket mereka. Untuk menjadi tetangga yang baik dan menghindari konflik versi dependensi dengan paket lain, mereka perlu menentukan berbagai versi dependensi yang mungkin dapat berfungsi. Inilah yang install_requiresdi setup.pylakukan.
Penulis penyebaran menulis untuk tujuan yang sangat berbeda, sangat spesifik: satu contoh aplikasi atau layanan yang diinstal, diinstal pada komputer tertentu. Untuk mengontrol penyebaran secara tepat, dan memastikan bahwa paket yang tepat diuji dan digunakan, penulis penyebaran harus menentukan versi yang tepat dan lokasi-sumber dari setiap paket yang akan diinstal, termasuk dependensi dan dependensi dependensi. Dengan spek ini, penyebaran dapat diulangi pada beberapa mesin, atau diuji pada mesin uji, dan penulis pemasangan dapat yakin bahwa paket yang sama digunakan setiap waktu. Inilah yang dilakukan seorang requirements.txt.
Jadi Anda dapat melihat bahwa, walaupun keduanya terlihat seperti daftar besar paket dan versi, kedua hal ini memiliki pekerjaan yang sangat berbeda. Dan tentu saja mudah untuk mencampur ini dan membuatnya salah! Tetapi cara yang tepat untuk memikirkan hal ini adalah itu requirements.txtadalah "jawaban" untuk "pertanyaan" yang diajukan oleh persyaratan di semua setup.pyfile paket yang beragam . Alih-alih menulisnya dengan tangan, sering dihasilkan dengan memberi tahu pip untuk melihat semua setup.pyfile dalam satu set paket yang diinginkan, menemukan satu set paket yang dianggapnya sesuai dengan semua persyaratan, dan kemudian, setelah diinstal, "membekukan "daftar paket itu menjadi file teks (ini adalah asal pip freezenama itu).
Jadi takeaway:
setup.pyharus mendeklarasikan versi dependensi yang paling longgar yang masih bisa diterapkan. Tugasnya adalah untuk mengatakan apa yang bisa digunakan paket tertentu.
requirements.txtadalah manifes penyebaran yang mendefinisikan seluruh pekerjaan instalasi, dan tidak boleh dianggap terikat pada satu paket. Tugasnya adalah untuk mendeklarasikan daftar lengkap dari semua paket yang diperlukan untuk melakukan penyebaran.
- Karena kedua hal ini memiliki konten dan alasan yang berbeda untuk hal tersebut, tidak layak hanya menyalin satu ke yang lain.
Referensi:
install_requiresdigunakan untuk mendeklarasikan dependensi pada paket yang diperlukan agar paket bekerja dan digunakan oleh pengembang paket, sementararequirements.txtdigunakan untuk mengotomatiskan penginstalan lingkungan, yang memungkinkan menginstal perangkat lunak tambahan dan melakukan penginstalan versi dan digunakan oleh sysadmin yang menyebarkan paket. Peran dan target audiens mereka berbeda secara signifikan, jadi mencoba menggabungkannya seperti keinginan OP adalah kesalahan desain yang sebenarnya.