Как запустить удаленную отладку с помощью PyCharm?

Я пытаюсь получить отладку между PyCharm (на хосте Windows) и виртуальным хостом debian, запускающим приложение django. Инструкции говорят, чтобы установить яйцо, добавить импорт, а затем вызвать команду. Я предполагаю, что эти вещи нужно сделать на хозяине-дебиан?

Итак, в каком файле я должен помещать эти две строки?

from pydev import pydevd pydevd.settrace('not.local', port=21000, stdoutToServer=True, stderrToServer=True) 

Я попытался поместить его в settings.py, но получил такую ​​вещь …

 File "/django/conf/__init__.py", line 87, in __init__ mod = importlib.import_module(self.SETTINGS_MODULE) File "/django/utils/importlib.py", line 35, in import_module __import__(name) File "/settings.py", line 10, in <module> pydevd.settrace('dan.local', port=21000, stdoutToServer=True, stderrToServer=True) File "/pycharm-debug.egg/pydev/pydevd.py", line 1079, in settrace debugger.connect(host, port) File "/pycharm-debug.egg/pydev/pydevd.py", line 241, in connect s = StartClient(host, port) File "/pycharm-debug.egg/pydev/pydevd_comm.py", line 362, in StartClient sys.exit(1) SystemExit: 1 

Хотя pycharm просто сидел там «ожидая связи»,

3 Solutions collect form web for “Как запустить удаленную отладку с помощью PyCharm?”

PyCharm (или ваш идеал выбора) действует как «сервер», и ваше приложение является «клиентом»; поэтому сначала вы запускаете сервер – скажите IDE «отлаживать» – затем запустите клиент – это какой-то код с инструкцией settrace в нем. Когда ваш код python попадает в settrace он подключается к серверу – pycharm – и начинает подавать ему данные отладки.

Чтобы это произошло:

1. Скопируйте библиотеку pydev на удаленную машину

Поэтому мне пришлось скопировать файл из C:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg на мою Linux-машину. Я положил его на /home/john/api-dependancies/pycharm-debug.egg

2. Поместите яйцо в PYTHONPATH

Надеюсь, вы понимаете, что не сможете использовать яйцо, если python не сможет его найти. Я думаю, что большинство людей используют easy_install, но в моем экземпляре я добавил это явно, поставив это:

  import sys sys.path.append('/home/john/app-dependancies/pycharm-debug.egg') 

Это необходимо только потому, что я все еще не успел установить яйцо. Это мое обходное решение.

3. настройте конфигурацию сервера отладки

В PyCharm вы можете настроить сервер отладки через:

  • Run -> Edit Configurations : открывает диалоговое окно «Run / Debug Configurations»
  • По умолчанию -> «Удаленная отладка Python»: используется шаблон
  • заполните локальное имя и порт хоста, и вы, вероятно, захотите «использовать сопоставление маршрутов», но более подробно обо всем этом ниже …
  • "ОК"

    Локальное имя хоста : означает имя сервера – это хост-машина Windows в моем случае – или фактически IP-адрес хост-компьютера Windows, поскольку имя хоста неизвестно моей удаленной машине. Таким образом, виртуальный (удаленный) компьютер должен иметь возможность доступа к хосту. ping и netstat хороши для этого.

    Порт : может быть любым свободным непривилегированным портом, который вам нравится. например: 21000 вряд ли будет использоваться.

    На данный момент не стоит беспокоиться о сопоставлениях пути.

4. Запустите сервер отладки

  • Run -> Debug : запустите сервер отладки – выберите конфигурацию, которую вы только что создали.

Появится вкладка консоли отладки, и вы должны получить

  Starting debug server at port 21000 

в консоли, что означает, что идеологический сервер отладки ждет, пока ваш код откроет для него соединение.

5. Вставьте код

Это работает внутри единичного теста:

 from django.test import TestCase class APITestCase(TestCase): def test_remote_debug(self): import sys sys.path.append('/home/john/dependancies/pycharm-debug.egg') from pydev import pydevd pydevd.settrace('192.168.33.1', port=21000, suspend=False) print "foo" 

И в веб-приложении django немного сложно узнать, куда вы его поместили – кажется, работает только после того, как все остальное сделано:

 if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) sys.path.append('/vagrant/pycharm-debug.egg') import pydevd pydevd.settrace('192.168.33.1', port=21000, suspend=False) 

Опять же, что IP-адрес – это поле, в котором вы запускаете Pycharm; вы должны иметь возможность пинговать этот IP-адрес из коробки, на которой запущен ваш код / ​​веб-сайт. Порт – это ваш выбор, просто убедитесь, что вы сказали pycharm слушать в том же порту. И я обнаружил, что suspend=False менее проблематичен, чем значения по умолчанию, а не только сразу же останавливается, поэтому вы не уверены, что он работает, но также пытается передать поток stdin / out, который может также дать вам горе.

6. Откройте брандмауэр

Брандмауэр Windows 7 по умолчанию блокирует ваше входящее соединение. Используя netstat на удаленном хосте, вы увидите, что SYN_SENT никогда не станет ESTABLISHED, по крайней мере, пока вы не добавите исключение из брандмауэра Windows для приложения «pycharm».

OS / X и Ubuntu не имеют брандмауэров, чтобы бросить бросок (по умолчанию кто-то мог применить его позже).

7. Установите точку останова и запустите код

После всего этого, когда все идет по плану, вы можете установить точку останова – где-то после того, как отладка запустится – и консоль pycharm покажет

 Connected to pydev debugger (build 107.386) 

и на вкладке «Отладчик» начнет работать стек переменных, и вы сможете пройти через код.

8. Сопоставления

Картирование говорит pycharm, где он может найти исходный код. Поэтому, когда отладчик говорит: «Я запускаю строку 393 файла /foo/bar/nang.py, Pycharm может перевести этот удаленный абсолютный путь в абсолютный локальный путь … и показать исходный код.

 /Users/john/code/app/ /opt/bestprice/app/ /Users/john/code/master/lib /opt/bestprice/lib/python2.7/site-packages 

Готово.

На самом деле это всего лишь заметка, но содержит некоторую информацию, которая может сэкономить часы.

  1. Прямо сейчас pip install pydevd работал для меня как на ubuntu, так и на centos 6
  2. Если вы хотите действительно отлаживать удаленный сервер, который находится за firewals и прочее, вы можете использовать следующий трюк:

ssh -R 8081: localhost: 8081 user@remote-server.com

это позволяет удаленному коду подключаться к вашему компьютеру при прослушивании на localhost: 8081

  1. Если удаленный отладчик не хочет запускаться, заявив, что он не может найти порт сокета, проверьте правила брандмауэра. Обратите внимание, что правило с «127.0.0.1» не совпадает с «localhost».

Похоже, что по какой-то причине отладчик не смог подключиться к вашему хосту Windows с помощью PyCharm. У вас нет других сообщений в stderr? Если вы этого не сделали, попробуйте запустить его еще раз, но с sterrToServer = false. Это может показать истинную причину, по которой она не соединяется.

  • Построение фрейма данных (панд) в pycharm, не отображающее
  • Python: Typehints для объектов argparse.Namespace
  • Смешивание аргументов datetime.strptime ()
  • PyCharm. / usr / bin / python ^ M: плохой интерпретатор
  • PyCharm "нет модуля с именем sys"
  • Имя теней xyz из внешней области
  • Головка Dataframe не показана в PyCharm
  • Как вы запускаете nosetest из pycharm?
  • Как предоставить консоли Python в PyCharm доступ к пространству переменных скрипта?
  • Ошибка теста Django только с pycharm - Не терминал | приложения еще не загружены
  • Нет автозаполнения для PyQt4 в PyCharm
  • Python - лучший язык программирования в мире.