Есть контейнер, в requirements.txt пакеты вида(как пример):
# aiohttp
aiohttp==3.7.4.post0
cchardet==2.1.7
aiodns==3.0.0
aiohttp-devtools==0.13.1
# serve
gunicorn==20.1.0
# config
pyyaml
# db
aiopg==1.3.2
asyncpg==0.24.0
# validation
aiohttp-apispec==2.2.1
# admin
aiohttp-admin2==0.0.5
Всё это устанавливается в контейнере. Но иногда при установке с нуля контейнера всё это ломается. Такое ощущение, что зависимости меняют свои версии. Как вообще правильно делать? Если делать после установки в контейнере
pip freeze > requirements.txt
То имеем кашу:
cat ./app/requirements_freeze.txt
aiodns==3.0.0
aiohttp==3.8.3
aiohttp-admin2==0.0.5
aiohttp-apispec==2.2.3
aiohttp-devtools==1.0.post0
aiohttp-jinja2==1.5
aiomysql==0.0.21
aiopg==1.3.5
aiosignal==1.2.0
anyio==3.6.1
apispec==3.3.2
asttokens==2.0.8
async-timeout==4.0.2
asyncpg==0.26.0
attrs==22.1.0
cchardet==2.1.7
cffi==1.15.1
charset-normalizer==2.1.1
click==8.1.3
devtools==0.9.0
executing==0.10.0
frozenlist==1.3.1
greenlet==1.1.3.post0
gunicorn==20.1.0
idna==3.4
Jinja2==3.1.2
MarkupSafe==2.1.1
marshmallow==3.18.0
motor==2.5.1
multidict==6.0.2
mypy==0.982
mypy-extensions==0.4.3
packaging==21.3
psycopg2-binary==2.9.4
pycares==4.2.2
pycparser==2.21
Pygments==2.13.0
pymongo==3.12.3
PyMySQL==0.9.3
pyparsing==3.0.9
python-dateutil==2.8.2
PyYAML==6.0
six==1.16.0
sniffio==1.3.0
SQLAlchemy==1.4.41
sqlalchemy-stubs==0.4
tomli==2.0.1
typing_extensions==4.4.0
umongo==3.1.0
watchgod==0.8.2
webargs==5.5.3
yarl==1.8.1
Уже не ясно, что есть пакет, а что есть зависимость. Отдельно держать файл с пакетами(первый вариант) и постоянно его актуализировать и постоянно в контейнере выполнять
pip freeze > requirements.txt
думаю неправильно. Как вообще сделать так, чтобы всё это хозяйство было статичным и не ломалось при пересборке контейнера с нуля т.е гарантировать, что после сборки контейнера - всё работало внутри? Может как-то сохранять локально и потом копировать внутрь контейнера?