Перейти к содержанию

requirements.txt vs wheel

requirement.txt vs wheel

requirements.txt
это список пожеланий

Например:

requests==2.32.3
flask==3.0.2

requirementx.txt не содержит сами пакеты, он говорит pip:

Note

“сходи в интернет и попробуй всё это собрать”


wheel
уже готовая коробка с пакетом

Например:

requests-2.32.3.whl

Внутри уже:

  • код
  • metadata
  • иногда binaries

Поэтому requirements.txt часто бесит

flow requirements.txt

graph TD
A[requirements.txt]
--> B[pip]
B --> C[ищет пакеты]
C --> D[ищет зависимости]
D --> E{есть wheel?}
E -->|Да| F[install wheel]
E -->|Нет| G[compile source]
G --> H[ошибки]

flow wheel

graph TD
A[wheel]
--> B[готовый пакет]
B --> C[install]
C --> D[works]

Простая аналогия

requiremets.txt

список ингридиентов

wheel

готовая еда из магазина


Зачем нужен requirements.txt

Потому что:

  • wheel может быть 100 файлов
  • руками их неудобно хранить
  • requirements.txt удобно читать
  • удобно обновлять версии
  • удобно для git

И вот почему wheel кажется “лучше”

Потому что он:

  • уже собран
  • уже готов
  • меньше build ошибок

Но:

  • wheel не заменяет описание зависимостей
  • requirements.txt всё равно нужен

Production best practice

requirements.txt + wheel packages