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

14 投票
7 回答
11049 浏览
提问于 2025-04-17 12:27

我有一个Python脚本,想用python-mode来调试它。我在这个讨论串中看到,可以通过输入M-x pdb来调试我的Python脚本,但我遇到了以下错误:

搜索程序时出错:没有这样的文件或目录,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-pathM-: (getenv "PATH")时,得到的路径不同(M-: (getenv "PATH")返回的路径更长)。

关于这个:

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

7 个回答

3

在命令行提示符下输入

which pdb

在Emacs中,输入 M-x customize。然后选择 编程 > 工具 > Gud。把 gud-pdb-command-name 的值设置为通过 which pdb 命令得到的路径。

如果你的Emacs版本的自定义菜单结构不同,你也可以试试

C-h v gud-pdb-command-name

然后点击 customize 链接,在那里设置 pdb 的路径。

虽然上面的步骤不同,但我是通过阅读 “在emacs中运行pdb” 这篇文章了解到的。

7

要运行Python调试器,M-x pdb 需要找到一个叫 pdb 的可执行文件。虽然在某些Python版本中可能会有这个 pdb 文件,但并不是所有版本都有。

为了解决这个问题,有一个提案在 GNU的bug报告 #21521: pdb默认建议命令 中。

在这个问题解决之前,你可以设置一个变量 gud-pdb-command-name 来定义启动pdb时使用的命令。在 .emacs 文件中添加...

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

关于我之前的评论和你后来的问题更新:

首先,你需要在终端中找到一个合适的 $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 包

更新

好的,结果发现 Emacs 的 pdb 命令并不是由 python-mode 提供的,它需要找到一个叫做 "pdb" 的可执行文件。解决这个问题的简单方法是,在你的 $PATH 中的某个目录下创建一个叫 "pdb" 的 shell 包装器:

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

(我在 这里 找到了一条建议使用这种方法的说明。)

在 Windows 下,相应的文件应该叫 pdb.bat,内容如下:

python -u -m pdb %1

-u 选项可以防止 Python 缓存输出。)

撰写回答