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 теперь должен использовать ваш python virtualenv вместо общесистемного питона.