Заставить Flask использовать только библиотеки, содержащиеся в файле requirements.txt?

У меня сейчас работает приложение Flask на Google App Engine. Локально приложение работает в виртуальной среде и ссылается на соответствующие библиотеки, установленные в каталоге venv / Lib / site-packages.

Когда приложение обновляется в GAE, файл requirements.txt используется для определения того, какие библиотеки / зависимости необходимо установить. Я часто получаю утомительные ошибки, такие как «Модуль не найден», и мне приходится не забывать добавить указанный модуль в мой файл requirements.txt, а затем повторно развертывать и проверять журналы ошибок, что требует времени.

В моей виртуальной среде установлено множество зависимостей, только некоторые из которых нужно указать в моем файле requirements.txt, поскольку я использую только некоторые из них в своем приложении Flask. Итак, я пытаюсь найти способ протестировать свое приложение локально, как если бы оно работало в GAE, заставляя Flask ссылаться только на эти зависимости в моем файле requirements.txt, поэтому, если есть ошибка «Модуль не найден», я выиграл Мне не нужно повторять gcloud app deploy и заново перебирать журналы, а просто делать это быстро на моей собственной машине.

Надеюсь, это было не так уж сложно, лол.

У вас должен быть один venv для каждого проекта, который содержит только зависимости этого проекта.

Klaus D. 05.04.2021 22:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
25
1

Ответы 1

  1. Для ясности: не все, что установлено в вашем виртуальном окружении, нужно указывать в файле requirements.txt. Некоторые библиотеки установлены, потому что они зависят от другого. Например, просто перечисление Flask приведет к установке Jinja.
  2. Что касается вашей конкретной проблемы, вы в основном говорите, что не ограничили фактические библиотеки, которые вам нужны для вашего проекта. Обычно это происходит из-за копирования установленных библиотек из другого проекта.
  3. Вы можете использовать pip3 freeze > requirements.txt или pip2 freeze > requirements.txt для автоматического создания файла requirements.txt. Проблема с этим методом заключается в том, что он будет включать все, что установлено в вашем виртуальном окружении, и, похоже, вы этого не хотите.
  4. Некоторые предлагают использовать pipreqs (см. Этот ответ Переполнение стека).
  5. Обычно я делаю это вручную, т.е. удаляю существующий venv, создаю requirements.txt только с основами - python, flask / django, запускаю вашу программу, а затем вручную добавляю каждую библиотеку, на которую она жалуется, в файл requirements.txt и переустанавливаю содержимое ваш файл requirements.txt. Промыть и повторить, пока не исчезнут ошибки. Теперь у вас есть полные требования.

Другие вопросы по теме