Как стать автором
Обновить

Настраиваем удаленную отладку Python при помощи SSH

Появилась необходимость отлаживать питоновский проект на удаленной машине. Тогда как рабочий компьютер находится в офисе за NAT, и достучаться до него с внешки оказалось не тривиально.

Было решено использовать удаленную отладку через ssh с пробросом портов. Пользуюсь я Idea, поэтому все описание будут под нее.

Для начала пробрасываем порт с удаленной машины на локальную.

ssh -f -N -R 30001:127.0.0.1:777 user@192.168.1.2

где:
30001 это порт на который будет стучаться запущенный скрипт,
777 – это порт на локальной машине который мы будем слушать, в обоих случаях подойдут любые открытые порты, но не забываем, что для некоторых могут быть необходимы дополнительные права.
user@192.168.1.2 – адрес сервера на котором запускается проект.

Добавляем в idea удаленную отладку:

Прописываем параметры порта которые добавили в предыдущем пункте. При желании меняем имя конфигурации.

Во вкладке Path mapping добавляем пути к исходникам на сервере и на локальной машине.

В случае если они будут различаться, будет предложено их скачать, но сейчас мы не рассматриваем этот вариант.

На удаленной машине мы ставим пакет pycharm, он есть в pip.

Добавляем в точку входа приложения дополнительные строки.

import pydevd
pydevd.settrace('localhost', port=30001, stdoutToServer=True, stderrToServer=True)

В Idea запускаем созданную конфигурацию debug.

В консоли ожидаем сообщение:

Waiting for process connection...

Starting debug server at port 777

Use the following code to connect to the debugger:

import pydevd

pydevd.settrace('localhost', port=777, stdoutToServer=True, stderrToServer=True)

Это значит, что отладчик ожидает подключение.

Запускаем скрипт на удаленной машине, после чего скрипт останавливается на первой строчке после подключения.

В случае если версии pydevd на удаленной и локальной машине различаются, может выдаваться предупреждение, но я не встретил никаких проблем с этим.

P.S Буду рад инвайту.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.