На перший погляд, це здається , що requirements.txt
і setup.py
дурні дублікатами, але важливо розуміти , що в той час як форма схожа, передбачувана функція дуже відрізняється.
Мета автора пакета, визначаючи залежності, - сказати, "де б ви не встановили цей пакет, це інші потрібні вам пакети, щоб цей пакет працював".
На відміну від цього, автор розгортання (який може бути однаковою людиною в різний час) має іншу роботу, оскільки вони говорять "ось список пакетів, які ми зібрали разом і протестували, і які мені зараз потрібно встановити".
Автор пакета пише для найрізноманітніших сценаріїв, тому що вони розміщують свої роботи там, щоб вони використовувались способами, про які вони можуть не знати, і не мають можливості знати, які пакунки будуть встановлені поряд із їх пакетом. Щоб бути добрим сусідом і уникати конфліктів версій залежності з іншими пакетами, їм потрібно вказати якомога ширший діапазон версій залежностей, наскільки це можливо. Це те , що install_requires
в setup.py
робить.
Автор розгортання пише для зовсім іншої, дуже конкретної мети: одиничного екземпляра встановленого додатка чи послуги, встановленого на певному комп'ютері. Щоб точно контролювати розгортання та бути впевненим, що правильні пакети перевірені та розгорнуті, автор розгортання повинен вказати точну версію та джерело розташування кожного встановленого пакету, включаючи залежності та залежності залежностей. За допомогою цієї специфікації розгортання можна повторно застосувати до декількох машин або протестувати на тестовій машині, і автор розгортання може бути впевнений, що одні й ті ж пакети розгортаються щоразу. Це те, що requirements.txt
робить.
Тож ви можете бачити, що в той час як вони обидва виглядають як великий список пакетів та версій, у цих двох речей є дуже різні завдання. І це, безумовно, легко змішати це і зрозуміти неправильно! Але правильний спосіб подумати над цим - requirements.txt
це "відповідь" на "питання", поставлене вимогами у всіх різних setup.py
файлах пакунків. Замість того, щоб писати це вручну, це часто генерується, повідомляючи pip переглянути всі setup.py
файли в наборі потрібних пакетів, знайти набір пакетів, які, на його думку, відповідають усім вимогам, а потім, після їх встановлення, "заморожують" "цей список пакетів у текстовий файл ( pip freeze
звідси походить назва).
Тож винос:
setup.py
слід оголосити найбільш слабкі можливі версії залежностей, які досі працюють. Його завдання - сказати, з чим може працювати певний пакет.
requirements.txt
це маніфест розгортання, який визначає всю роботу з монтажу, і не слід вважати його прив'язаним до якогось одного пакету. Його завдання - оголосити вичерпний перелік усіх необхідних пакетів, щоб зробити роботу розгортання.
- Оскільки ці дві речі мають такий різний зміст та причини, що існують, просто неможливо просто скопіювати одну в іншу.
Список літератури:
install_requires
використовується для декларування залежностей від пакетів, необхідних для роботи пакету і використовуються розробником пакету, при цьомуrequirements.txt
використовується для автоматизації встановлення середовищ, що дозволяє встановлювати додаткове програмне забезпечення та виконувати прив'язку версій і використовуються систематизаторами, що розгортають пакет. Їх роль та цільова аудиторія суттєво відрізняються, тому намагання поєднати їх, як побажання ОП, - це справжня помилка дизайну.