Режим Python в Emacs: нет такого файла или каталога, pdb

у меня есть скрипт 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 ответов


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

сначала выясните значение для $PATH, которая работает в вашем терминале. Использовать which 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 package.

обновление

хорошо, так получается Emacs'


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

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

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

(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 существует уже существующее, основанное на Lisp определение pdb. Эти функции Lisp работают в Eshell так же, как обычные команды оболочки.

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