Режим Python в Emacs: нет такого файла или каталога, pdb - PullRequest
12 голосов
/ 07 февраля 2012

У меня есть скрипт Python, который я хочу отладить с помощью python-mode . Я прочитал в этой теме , что я могу отлаживать свой скрипт на 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 ]

9 голосов
/ 07 февраля 2012

В дополнение к моему комментарию ранее и вашему последующему обновлению на вопрос:

Сначала определите значение для $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 .

Обновление

Хорошо, получается, что команда pdb Emacs не предоставляется python-mode, и она ожидает найти исполняемый файл с именем "pdb". Самый простой способ исправить это - создать оболочку оболочки с именем "pdb" в каталоге на вашем $ PATH:

#!/bin/sh
exec python -m pdb "$@"

(я нашел здесь примечание , предлагающее эту технику.)

Эквивалентом в Windows будет файл с именем pdb.bat, содержащий:

python -u -m pdb %1

(-u запрещает Python буферизовать свой вывод.)

6 голосов
/ 19 ноября 2015

Чтобы запустить отладчик Python, M-x pdb ожидает найти исполняемый файл с именем pdb. Хотя исполняемый файл pdb может существовать в некоторых дистрибутивах Python, он существует не во всех из них.

Предложение исправить это содержится в Отчет об ошибке GNU # 21521: pdb по умолчанию предлагает команду .

Пока ошибка не устранена, вы можете установить переменную gud-pdb-command-name, чтобы определить команду, используемую для запуска pdb. В .emacs добавьте ...

(setq gud-pdb-command-name "python -m pdb")
3 голосов
/ 08 февраля 2012

В приглашении оболочки введите

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» .

2 голосов
/ 07 февраля 2012

Вы можете создать собственную команду, например:

;; 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)))
0 голосов
/ 20 июня 2012

В Emacs 23.3.1 и, вероятно, выше, еще одним вариантом является использование оболочки Emacs, Eshell (M-x eshell).В Eshell существует уже существующее определение pdb на основе Lisp.Эти функции Lisp работают в Eshell, как обычные команды оболочки.

Так что pdb "./manage.py runserver" запустит сервер Django, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...