在Emacs中的Python模式:没有这样的文件或目录,pdb

Ame*_*ina 12 python debugging emacs

我有一个python脚本,我想用python-mode调试.我在这个帖子中读到我可以调试我的python脚本M-x pdb,但是我收到以下错误:

搜索程序:没有这样的文件或目录,pdb

我可以python -m pdb my_source_file.py在迷你缓冲区中提示,但如果Emacs可以直接从我运行的文件中推断出这个命令会很好M-x pdb

更新:

运行:

  • 红帽企业Linux服务器版本5.1(Tikanga)
  • Emacs 23.3.1

路径之间的差异

当我跑步M-: exec-path和跑步时,我得到不同的路径M-: (getenv "PATH")(返回的路径M-: (getenv "PATH") 更长).

有了这个:

  • 在哪里pdb?如何将其添加到Emacs路径?
  • 有没有办法让Emacs 查看环境变量所持有的路径PATH

san*_*inc 9

继我之前的评论以及您对该问题的后续更新:

首先找出适合$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))
Run Code Online (Sandbox Code Playgroud)

您可能还需要明确设置PYTHONPATH或类似的环境变量; 你可以使用上面的"setenv"行之类的行,或者只使用exec-path-from-shell elisp包.

更新

好的,事实证明Emacs的pdb命令不是由提供的python-mode,它希望找到一个名为"pdb"的可执行文件.解决这个问题的简单方法是在$ PATH的目录中创建一个名为"pdb"的shell包装器:

#!/bin/sh
exec python -m pdb "$@"
Run Code Online (Sandbox Code Playgroud)

(我在这里发现了一个说明这种技术的说明.)

Windows下的等效文件是一个名为pdb.bat的文件,其中包含:

python -u -m pdb %1
Run Code Online (Sandbox Code Playgroud)

(-u防止Python缓冲其输出.)


Cha*_*uis 6

要运行Python调试器,M-x pdb需要查找名为的可执行文件pdb.虽然pdb可执行文件可能存在于某些Python发行版中,但它并不存在于所有Python发行版中.

修复此问题的建议是在GNU错误报告#21521中:pdb默认建议命令.

在修复错误之前,您可以设置变量gud-pdb-command-name以定义用于启动pdb的命令.在.emacs中,添加...

(setq gud-pdb-command-name "python -m pdb")
Run Code Online (Sandbox Code Playgroud)