Di muka itu, tampaknya itu requirements.txt
dansetup.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_requires
di setup.py
lakukan.
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.txt
adalah "jawaban" untuk "pertanyaan" yang diajukan oleh persyaratan di semua setup.py
file paket yang beragam . Alih-alih menulisnya dengan tangan, sering dihasilkan dengan memberi tahu pip untuk melihat semua setup.py
file 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 freeze
nama itu).
Jadi takeaway:
setup.py
harus mendeklarasikan versi dependensi yang paling longgar yang masih bisa diterapkan. Tugasnya adalah untuk mengatakan apa yang bisa digunakan paket tertentu.
requirements.txt
adalah 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_requires
digunakan untuk mendeklarasikan dependensi pada paket yang diperlukan agar paket bekerja dan digunakan oleh pengembang paket, sementararequirements.txt
digunakan 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.