Ответ 1
PyCharm (или ваш идеал выбора) действует как "сервер", и ваше приложение является "клиентом"; поэтому сначала запустите сервер - сообщите IDE "debug" - затем запустите клиент - это какой-то код с инструкцией 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": это шаблон для использования
- заполните имя и порт локального хоста, и вы, вероятно, захотите "использовать сопоставление маршрутов", но более подробно обо всем этом ниже...
-
"OK"
Локальное имя узла: означает имя сервера - то, что хост-компьютер Windows в моем случае - или фактически IP-адрес хост-машины Windows, поскольку имя хоста неизвестно моей удаленной машине, Таким образом, виртуальный (удаленный) компьютер должен иметь возможность доступа к хосту.
ping
иnetstat
хороши для этого.Порт: может быть любым свободным непривилегированным портом, который вам нравится. например:
21000
вряд ли будет использоваться.Не беспокойтесь о сопоставлениях пути на данный момент.
4. Запустите сервер отладки
- Run- > Debug: запустите сервер отладки - выберите конфигурацию, которую вы только что создали.
Появится вкладка консоли отладки, и вы должны получить
Starting debug server at port 21000
в консоли, что означает, что сервер отладки ide ожидает, что ваш код откроет для него соединение.
5. Вставьте код
Это работает внутри unit test:
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
Готово.