Режим Python в Emacs: нет такого файла или каталога, pdb
У меня есть сценарий Python, который я хочу отладить в режиме Python. Я прочитал в этой теме, что я могу отлаживать свой скрипт на Python M-x pdb
Однако я получаю следующую ошибку:
Поиск программы: нет такого файла или каталога, pdb
Я могу предоставить python -m pdb my_source_file.py
в приглашении в минибуфере, но было бы неплохо, если бы Emacs мог вывести эту команду прямо из файла, на котором я запускаю M-x pdb
Обновить:
Работает на:
- Red Hat Enterprise Linux Server, выпуск 5.1 (Tikanga)
- Emacs 23.3.1
Различия между путями
Я получаю разные пути, когда я бегу M-: exec-path
и когда я бегу M-: (getenv "PATH")
(тот, который вернулся M-: (getenv "PATH")
длиннее).
С этим:
- Где
pdb
расположен? Как я могу добавить его в путь Emacs? - Есть ли способ попросить Emacs также изучить пути, содержащиеся в переменной окружения
PATH
?
5 ответов
В дополнение к моему комментарию ранее и вашему последующему обновлению вопроса:
Сначала выясните значение для $PATH
это работает в вашем терминале. использование which pdb
найти где pdb
исполняемый файл находится.
Затем установите $PATH
переменная среды явно в Emacs, и синхронизировать ее с exec-path
следующее:
(setenv "PATH" "/usr/local/bin:/usr/bin:/bin:/some/other/dir")
(setq exec-path (split-string (getenv "PATH") path-separator))
Возможно, вам также потребуется явно установить PYTHONPATH
или аналогичные переменные среды; Вы можете сделать это, используя такие строки, как строка "setenv" выше, или просто использовать пакет exec-path-from-shell elisp.
Обновить
Хорошо, так получается Emacs pdb
команда не предоставляется python-mode
и он ожидает найти исполняемый файл с именем "pdb". Самый простой способ исправить это - создать оболочку оболочки с именем "pdb" в каталоге на вашем $ PATH:
#!/bin/sh
exec python -m pdb "$@"
(Я нашел здесь примечание, предлагающее эту технику.)
Эквивалентом в Windows будет файл с именем pdb.bat, содержащий:
python -u -m pdb %1
(The -u
не позволяет Python буферизовать свой вывод.)
Чтобы запустить Python Debugger, M-x pdb
ожидает найти исполняемый файл с именем pdb
, В то время как pdb
Исполняемый файл может существовать в некоторых дистрибутивах Python, он не существует во всех них.
Предложение исправить это содержится в отчете об ошибке GNU #21521: предложенная команда pdb по умолчанию.
Пока ошибка не исправлена, вы можете установить переменную gud-pdb-command-name
определить команду, используемую для запуска pdb. В.emacs добавь...
(setq gud-pdb-command-name "python -m pdb")
В командной строке введите
which pdb
В Emacs введите M-x customize
, Выберите "Программирование"> "Инструменты"> "Gud". Установите значение gud-pdb-command-name
на путь, возвращенный which pdb
,
Если ваша версия Emacs представляет другую организацию для меню настройки, вы также можете попробовать
C-h v gud-pdb-command-name
Затем нажмите на customize
ссылку и установите путь к pdb
там.
Хотя инструкции выше отличаются, я узнал об этом, прочитав "Запуск pdb под emacs".
Вы можете создать собственную команду, например:
;; PDB command line
(defun user-python-debug-buffer ()
"Run python debugger on current buffer."
(interactive)
(setq command (format "python -u -m pdb %s " (file-name-nondirectory buffer-file-name)))
(let ((command-with-args (read-string "Debug command: " command nil nil nil)))
(pdb command-with-args)))
В Emacs 23.3.1 и, вероятно, выше, еще одним вариантом является использование оболочки Emacs, Eshell (M-x eshell
). В Eshell существует уже существующее определение pdb на основе Lisp. Эти функции Lisp работают в Eshell, как обычные команды оболочки.
Так pdb "./manage.py runserver"
запустит сервер Django, например.
Мой ответ основан на том, что упомянул @Chad Nouis. ссылка
Однако я добавил это в режим python, каждый раз при загрузке режима python он будет устанавливать gud-pdb-command-name
к "python -m pdb"
;; Set the PDB command
(add-hook 'python-mode-hook
(lambda () (setq gud-pdb-command-name "python -m pdb")))
Все сходят с ума, говоря, что ты должен сделать pdb
файл и сделайте его исполняемым, а затем введите ./pdb your_code.py
. Это проще.
Будьте там, где вы хотите запустить отладчик. Вероятно, в вашем файле python, возможно, используйтеM-x cd
куда-то добраться.
Затем введите: M-x pdb
Вам будет предложено:
Run pdb (like this):
Вы хотите, чтобы это выглядело так:
Run pdb (like this): python -m pdb your_code.py
Иногда, если я хочу запустить свой код как модуль.
Run pdb (like this): python -m pdb -m some_package.my_code
Затем введите help
и прочтите это https://docs.python.org/3/library/pdb.html