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

发布于 2021-01-29 15:14:01

我正在使用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进程?

关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    python-shell使用变量python-default- interpreter来确定要使用哪个python解释器。当此变量的值为时cpython,将查询变量python-python- commandpython-python-command- args以确定要使用的解释器和参数。可以通过操纵这两个变量virtualenv.el来设置当前的虚拟环境。

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

    但是,当您这样做时M-! python,就不会使用变量python-python-commandpython-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。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看