从当前的virtualenv中在Emacs中获取pdb以使用Python进程
我正在使用pdb在emacs中调试一些python代码,并遇到一些导入问题。依赖项安装在我指定的virtualenv环境之一中。
Pdb固执地使用/ usr / bin / python,而不是我virtualenv中的python进程。
我使用virtualenv.el来支持emacs中的环境切换,并通过在
http://jesselegg.com/archives/2010/03/14/emacs-python-
programmers-2-virtualenv-ipython-daemon-
mode/
在运行Mx python-shell时这很好用
>>> import sys
>>> print sys.path
这指向我所有的virtualenv库,表明python-shell是我的virtualenv的。
但是,这与M-相矛盾!哪个python,它给出了 / usr / bin / python
有谁知道我如何告诉Mx pdb从当前活动的virtualenv中采用python进程?
-
python-shell
使用变量python-default- interpreter
来确定要使用哪个python解释器。当此变量的值为时cpython
,将查询变量python-python- command
和python-python-command- args
以确定要使用的解释器和参数。可以通过操纵这两个变量virtualenv.el
来设置当前的虚拟环境。因此,当您使用
python-shell
命令时,它可以毫无问题地使用您的虚拟环境。但是,当您这样做时
M-!
python
,就不会使用变量python-python-command
和python-python-command- args
。因此,它使用在路径中找到的python工具。调用时,
M-x
pdb
它使用gud-pdb-command-name作为默认的pdb工具。要重新定义此变量,每次激活环境时,都可以执行以下操作:(defadvice virtualenv-activate (after virtual-pdb) (custom-set-variables '(gud-pdb-command-name (concat virtualenv-active "/bin/pdb" )))) (ad-activate 'virtualenv-activate)
要在您的虚拟环境中使用pdb,请执行以下操作:
cp /usr/bin/pdb /path/to/virtual/env/bin
然后,将/ path / to / virtual / env / bin / pdb的第一行编辑为:
#! /usr/bin/env python
重新激活您的env,Pdb现在应该使用您的virtualenv python而不是系统范围的python。