Diffuse установлен на моей рабочей станции и хорошо работает с Mercurial, поэтому я часто использую его для сравнения. Тем не менее, я также использую Python virtualenv, чтобы использовать несколько различных модулей в более контролируемой обстановке (легче доставлять другим людям). Когда я пытаюсь запустить Diffuse изнутри моего virtualenv (здесь он называется sandbox
), он рвется:
(sandbox)nickt@aiguadassi:/home/codes/nickt/Tape-Worms/Code
$ diffuse bread.py # fail...
Traceback (most recent call last):
File "/usr/bin/diffuse", line 124, in <module>
import pygtk
ImportError: No module named pygtk
Снаружи он работает просто отлично ...
(sandbox)nickt@aiguadassi:/home/codes/nickt/Tape-Worms/Code
$ deactivate
nickt@aiguadassi:/home/codes/nickt/Tape-Worms/Code
$ diffuse bread.py # works fine.
Я предполагаю, что Diffuse - это приложение на Python, которое полагается на поиск модулей в среде; есть ли способ заставить его использовать «глобальную» среду (например, через псевдоним)? Я не уверен, что программа делает по отношению к среде ... она ищет модули в PATH, пытаясь использовать все, что which python
появляется ...
Другой вариант - добавить псевдоним в ваш файл ~/.bashrc
:
alias diffuse='/usr/bin/python /usr/bin/diffuse'
Это предотвращает поломку при обновлении diffuse.
Если первая строка /usr/bin/diffuse
выглядит следующим образом:
#!/usr/bin/env python
, она будет работать на Python внутри вашего virtualenv. Большинство приложений Python должны установить его на:
#!/usr/bin/python
, который будет запускать его с системой Python. Если это не так, это может быть ошибка либо в Diffuse, либо в его упаковке в Debian / Ubuntu.