Heroku устанавливает дополнительный пакет Python
У меня есть приложение на Python / Django, которое использует Pipfile
и Pipfile.lock
, работающее на стеке Heroku-22 с классическими пакетами сборки.
requirements.txt
не является частью базы кода, поэтому, например, Ошибка Heroku: Модуль не найден: нет модуля с именем "запросы" и подобные проблемы не актуальны.
Pipfile
и Pipfile.lock
содержат psycopg2
(не psycopg2-binary
). В среде тестирования установлены ожидаемые пакеты, однако в рабочей среде установлен дополнительный пакет psycopg
.
$ heroku run bash -a my-app-production
~ $ pip freeze | grep -i psyco
psycopg==3.2.4
psycopg2==2.9.10
против
$ heroku run bash -a my-app-testing
~ $ pip freeze | grep -i psyco
psycopg2==2.9.10
Среда тестирования и рабочая среда одинаковы, за одним исключением - серверный Pgbouncer работает в рабочей среде. Pgbouncer (https://github.com/pgbouncer/pgbouncer) перечисляет psycopg
как одну из своих зависимостей. Хотя, согласно документации Heroku, пул подключений Pgbouncer существует на сервере базы данных, а не на app dyno.
Кроме того, установка зависимостей приложения локально в контейнер Docker с помощью pipenv install --deploy
работает так, как ожидалось.
Есть какие-нибудь идеи, откуда берется этот дополнительный пакет psycopg
? Он установлен из-за Pgbouncer (на мой взгляд, маловероятно)?