从当前virtualen获取Emacs中的pdb以使用Python进程

2024-05-23 21:57:12 发布

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

我正在使用pdb调试emacs中的一些python代码,并遇到一些导入问题。这些依赖项安装在我所怀疑的virtualenv环境中。在

Pdb顽固地使用/usr/bin/python,而不是我的virtualenv中的python进程。在

我使用虚拟世界支持在emacs中通过中描述的激活后挂钩切换环境

http://jesselegg.com/archives/2010/03/14/emacs-python-programmers-2-virtualenv-ipython-daemon-mode/

这在运行M-xpythonshell时非常有效

>>> import sys
>>> print sys.path 

这指向我所有的virtualenv库,表明pythonshell是virtualenv的。在

但这与M-相矛盾!哪个python提供了/usr/bin/python

有人知道我如何告诉M-xpdb采用当前活动的virtualenv中的python进程吗?在


Tags: 代码comhttpbin环境virtualenv进程usr
3条回答

python-shell使用变量python-default-interpreter来确定要使用哪个python解释器。当该变量的值为cpython时,将参考变量python-python-command和{}来确定解释器 以及要使用的参数。这两个变量由virtualenv.el操作以设置当前虚拟环境。在

因此,当您使用python-shell命令时,它会毫无问题地使用您的虚拟环境。在

但是,当你这么做的时候!python,您没有使用变量python-python-command和{}。所以它使用在路径中找到的python工具。在

当您调用M-xpdb时,它使用gud pdb命令名作为默认的pdb工具。要重新定义此变量,每次激活环境时,可以执行以下操作:

(defadvice virtualenv-activate (after virtual-pdb)
  (custom-set-variables
     '(gud-pdb-command-name
        (concat virtualenv-active "/bin/pdb" ))))

(ad-activate 'virtualenv-activate)

要在虚拟环境中使用pdb,请执行以下操作:

^{pr2}$

然后编辑/path/to/virtual/env/bin/pdb的第一行:

#! /usr/bin/env python

重新激活env,Pdb现在应该使用virtualenv python而不是系统范围的python。在

像这样调用pdb:

python -m pdb myscript.py

而不是

^{pr2}$

您的pdb命令可能绑定到某个特定版本。在

$ ls -ald /usr/bin/pdb
lrwxrwxrwx 1 root root 6 Jun  2 23:02 /usr/bin/pdb -> pdb2.6

然后,看看pdb2.6的第一行。它包含

^{pr2}$

这就是为什么pdb很顽固,似乎总是在特定版本的Python下运行。因为它真的是!实际上,这种依赖关系对于像符号调试器这样的软件是有意义的。在

我从源代码编译了python2.7,显然pdb不在那里。 经过仔细检查,我发现pdb.py公司对于python-2.7,在lib文件夹下。 为了方便起见,我创建了一些符号链接:

$ cd /opt/python-dev   ##-- this is where I installed from sources
$ cd bin
$ sudo ln -s ../lib/python2.7/pdb.py pdb2.7
$ sudo ln -s pdb2.7 pdb

现在观察pdb2.7的第一行。上面写着:

#! /usr/bin/env python

。。。看起来比以前的版本好。这基本上意味着pdb将在您的环境中定义的当前Python下启动,无论它是什么,而不是任何硬编码的东西,比如/usr/bin/python2.6are。很高兴知道!在

我还从系统文件中删除了pdbpdb2.6,因为我更喜欢在virtualenv中开发/调试。这样做,我就不会再被同样的伎俩抓住了。在

我希望有帮助。在

相关问题 更多 >