У меня есть приложение Django, работающее в конфигурации Docker-compose, и я хотел бы иметь возможность интерактивно отлаживать его с Pycharm. Сначала я попытался и не смог настроить отладку, используя встроенную в Pycharm конфигурацию Docker Compose (результат: приложение работает и доступно, но отладка недоступна, я подозреваю, что из-за известной ошибки, при которой отладчику не удается подключиться, если сценарий точки входа занимает слишком много времени, чтобы вернуть ). Сейчас я пытаюсь настроить отладку с помощью удаленной отладки с помощью pydevd, примерно следуя инструкциям , содержащимся здесь и приведенным ниже:
- Добавление конфигурации запуска удаленного отладчика Python в Pycharm
В моем приложении Django скопируйте pycharm-debug-py3k.egg
в корневой каталог, добавьте его в путь, импортируйте pydevd и инициализируйте его в коде моего приложения следующим образом:
import sys
sys.path.append("pycharm-debug-py3k.egg")
import pydevd
pydevd.settrace('ip.address.of.my.machine', port=4444)
Запустить отладчик в Pycharm
- Запустите мое приложение с
docker-compose up
- Нажмите кнопку воспроизведения / возобновления программы в отладчике
Результатом этого является то, что в Pycharm консоль отладчика сообщает, что соединение активно («Подключено к отладчику pydev»). На вкладке отладчика показаны ожидаемые переменные и значения, присутствующие в файле, к которому я добавил фрагмент кода. Нет ошибок в журналах контейнеров для моего приложения Django, и журнал показывает ожидаемый результат для обычного запуска Django. Однако мое приложение недоступно из веб-браузера, и попытка запустить модульные тесты в контейнере зависает без ответа. После прерывания модульных тестов клавиатурой я получаю трассировку стека с таким сообщением внизу:
File "/usr/local/lib/python3.6/site-packages/pydevd.py", line 1392, in _locked_settrace
time.sleep(0.1) # busy wait until we receive run command
KeyboardInterrupt
Я удалил все точки останова, удалил .idea
, перезапустил Pycharm, перезапустил Docker и подтвердил, что, если я удалю фрагмент кода pydevd
, все модульные тесты и функция веб-сервера будут работать как положено.