В любой более менее большой компании разработчиков вы найдете и человека на "окошках", и трушного линуксоида, и любителя лавандового рафа на альтернативном с яблоком на крышке ноутбука. И если человек с windows с большей вероятностью будет пользоваться WLS (подсистему linux), то вот человек с macOS попробует запустить проект у себя нативно, и это может привести к проблемам с совместимостями некоторых библиотек. Также, учитывая что с высокой долей вероятности ваше приложение будет крутиться в docker контейнере на сервере, не плохо было бы понимать то, как оно работает конкретно в нем. Поэтому зачастую решением которое подойдет всем для корректной разработки приложения без проблем с совместимостью, это запуск и отладка приложения на компьютере разработчики в независимости от установленной ОС прямо в docker. И так я описал мотивацию, перейдем же к настройке вышесказанного.
Для начала необходимо добавить установку библиотеки debugpy для работы отладчика в наше приложение. вы пожете добавить ее в общий фаил requirements.txt или добавить команду DockerFile.
#debugging
RUN /opt/venv/bin/python -m ensurepip --upgrade && \
/opt/venv/bin/python -m pip install --no-cache-dir debugpyА также нам нужно поменять команду запуска приложения. Минимальной командой в данном случае будет
/opt/venv/bin/python -Xfrozen_modules=off -m debugpy --listen 0.0.0.0:5678 --wait-for-client main.pyВ команде указывается адрес и порт, это необходимо нам чтоб у нас появилась "точка входа" для отладчика на нашей main машине. Также не забываем пробросить порт "наружу" для того чтоб иметь возможность подключиться к порту контейнера.
Проброс порта прописывается в файле docker-compose:
ports:
- "5678:5678"Либо параметром при запуске контейнера
docker run -p 5678:5678 myimageДалее в команде идет параметр, который обозначает только одно - не запускать приложение до того момента как вы не подключились к контейнеру отладчиком. То есть при запуске контейнера он замрет на ожидании вашего подключения. Сразу после вашего подключения (запуска отладчика) начнется загрузка приложения. Последним параметром - указывается файл запуска.
С настройкой со стороны нашего приложения мы закончили, осталось добавить конфигурацию для самого отладчика.

И далее вводим вот такую конфигурацию
{
"version": "0.0.1",
"configurations": [
{
"name": "Python Debugger: docker",
"type": "python",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/home/"
}
]
}
]
}где в connect вы указываем адрес и порт, тот самый который мы пробросили из контейнера к порту, который указывали в команде запуска приложения. Также важно настроить параметр pathMappings - по сути мы просто указываем какая папка проекта локальной машины согласуется с папкой проекта в контейнере. В моем случае указана переменная. Она позволит не указывать точный адрес на локальной машине, прочтет текущую директорию при запуске.
Сохраняем, ставим брек поинты где вам нужно у себя в vsc, запускаем контейнер, отлаживаем приложение.
После изменений кода обязательно не забываем пересобрать контейнер, потому что при несогласованном коде дебагер не выкинет ошибки, а просто будет пропускать код которого нет на какой-либо стороне.
Теперь вся ваша команда может быть уверена что решения написанные на одной машине не повлияют на работоспособность на другой машине, и проект в проде будет стабильным (при наличии хорошей кодовой базы).
