Emacs中的Python模式:没有这样的文件或目录,pdb
我有一个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-path
和M-: (getenv "PATH")
时,得到的路径不同(M-: (getenv "PATH")
返回的路径更长)。
关于这个:
pdb
在哪里?我该如何将它添加到Emacs的路径中?- 有没有办法让Emacs也查看环境变量
PATH
中的路径?
7 个回答
在命令行提示符下输入
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” 这篇文章了解到的。
要运行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")
关于我之前的评论和你后来的问题更新:
首先,你需要在终端中找到一个合适的 $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 缓存输出。)