我正在使用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进程吗?在
python-shell
使用变量python-default-interpreter
来确定要使用哪个python解释器。当该变量的值为cpython
时,将参考变量python-python-command
和{virtualenv.el
操作以设置当前虚拟环境。在因此,当您使用
python-shell
命令时,它会毫无问题地使用您的虚拟环境。在但是,当你这么做的时候!}。所以它使用在路径中找到的python工具。在
python
,您没有使用变量python-python-command
和{当您调用M-x
pdb
时,它使用gud pdb命令名作为默认的pdb工具。要重新定义此变量,每次激活环境时,可以执行以下操作:要在虚拟环境中使用pdb,请执行以下操作:
^{pr2}$然后编辑/path/to/virtual/env/bin/pdb的第一行:
重新激活env,Pdb现在应该使用virtualenv python而不是系统范围的python。在
像这样调用pdb:
而不是
^{pr2}$您的pdb命令可能绑定到某个特定版本。在
然后,看看pdb2.6的第一行。它包含
^{pr2}$这就是为什么pdb很顽固,似乎总是在特定版本的Python下运行。因为它真的是!实际上,这种依赖关系对于像符号调试器这样的软件是有意义的。在
我从源代码编译了python2.7,显然pdb不在那里。 经过仔细检查,我发现pdb.py公司对于python-2.7,在lib文件夹下。 为了方便起见,我创建了一些符号链接:
现在观察pdb2.7的第一行。上面写着:
。。。看起来比以前的版本好。这基本上意味着pdb将在您的环境中定义的当前Python下启动,无论它是什么,而不是任何硬编码的东西,比如/usr/bin/python2.6are。很高兴知道!在
我还从系统文件中删除了pdb和pdb2.6,因为我更喜欢在virtualenv中开发/调试。这样做,我就不会再被同样的伎俩抓住了。在
我希望有帮助。在
相关问题 更多 >
编程相关推荐