代码之家  ›  专栏  ›  技术社区  ›  codeasone

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

  •  21
  • codeasone  · 技术社区  · 14 年前

    我正在使用pdb调试emacs中的一些python代码,并遇到一些导入问题。依赖项安装在我的一个bespoked 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 
    

    然而,这与M-相矛盾!哪条蟒蛇 /usr/bin/python文件

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

    3 回复  |  直到 10 年前
        1
  •  8
  •   Jérôme Radix    12 年前

    python-shell 使用变量 python-default-interpreter 确定要使用哪个python解释器。当此变量的值为 cpython python-python-command python-python-command-args 协商确定口译员 virtualenv.el 设置当前虚拟环境。

    蟒蛇壳 命令,它使用您的虚拟环境没有任何问题。

    但是,当你这么做的时候 python ,您没有使用变量 python命令 python命令参数 . 因此,它使用在您的路径中找到的python工具。

    当你打电话的时候 pdb 它使用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,请执行以下操作:

    cp /usr/bin/pdb /path/to/virtual/env/bin
    

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

    #! /usr/bin/env python
    

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

        2
  •  16
  •   spookylukey    13 年前

    像这样调用pdb:

    python -m pdb myscript.py
    

    而不是

    pdb myscript.py
    
        3
  •  1
  •   Richard Gomes    13 年前

    可能,你的 命令绑定到特定的版本。

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

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

    #! /usr/bin/python2.6
    

    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
    

    /usr/bin/python文件 /usr/bin/python2.6

    我也删除了 pdb公司 从系统文件来看,我更喜欢在virtualenv内部开发/调试。这样做,我就不会再被同样的把戏捉住了。

    希望对你有帮助。

        4
  •  0
  •   Gauthier    5 年前

    一个快速的解决方法是显式地调用虚拟环境中的python解释器。

    M-x pdb,然后:

    path/to/your/virtualenv/python3 -m pdb your_source.py