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

2024-04-29 06:07:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个要用python-mode调试的python脚本。我在this thread中读到可以用M-x pdb调试python脚本,但是出现以下错误:

Searching for program: no such file or directory, pdb

我可以在minibuffer的提示符中提供python -m pdb my_source_file.py,但是如果Emacs可以直接从我运行M-x pdb的文件推断出这个命令,那就更好了

更新:

运行时间:

  • Red Hat Enterprise Linux服务器5.1版(Tikanga)
  • Emacs 23.3.1版

路径之间的差异

当我运行M-: exec-pathM-: (getenv "PATH")时,我得到不同的路径(由M-: (getenv "PATH")返回的路径更长)。

有了这个:

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

Tags: pathno路径脚本forsearchingmode错误
3条回答

在shell提示符下键入

which pdb

在Emacs中,键入M-x customize。选择“编程”>;“工具”>;“Gud”。将gud-pdb-command-name的值设置为which pdb返回的路径。

如果您的Emacs版本为自定义菜单提供了不同的组织,您还可以尝试

C-h v gud-pdb-command-name

然后单击customize链接,并在那里将路径设置为pdb

尽管上面的说明不同,但我通过阅读"Running pdb under emacs"发现了这一点。

关于我先前的评论,以及你随后对这个问题的更新:

首先找出在终端中工作的$PATH的值。使用which pdb查找pdb可执行文件的位置。

然后,在Emacs中显式设置$PATH环境变量,并将其同步到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'pdb命令不是由python-mode提供的,它希望找到一个名为“pdb”的可执行文件。解决这个问题的简单方法是在$PATH上的目录中创建一个名为“pdb”的shell包装器:

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

(我发现一个提示这项技术的注释here。)

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

python -u -m pdb %1

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

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

解决这个问题的建议在GNU bug report #21521: pdb default suggested command中。

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

(setq gud-pdb-command-name "python -m pdb")

相关问题 更多 >