Как заставить Mercurial найти обновленную версию Python?

Моя система - RedHat 5 Linux и по умолчанию установлен Python 2.4. Чтобы выполнить Mercurial 1.81, я попытался обновить python с 2.4 до 2.6 и подумал, что сохранил его в другом каталоге. Я поставил жесткую ссылку с Python 2.6 на Python. Теперь я удалил его и надеюсь, что Python вернется к Python 2.4, чтобы избежать конфликта версий.

Вот команда, которую я использовал для удаления жесткой связи между python и python 2.6:

find -xdev -samefile /usr/bin/python | xargs rm

тогда я использовал команды как:

 ln -s /usr/bin/python2.4 /usr/bin/python
 ln -s /usr/bin/python2.6 /usr/local/bin/python
 export PATH=/usr/local/bin:$PATH
 Change first line of hg to #!/usr/bin/env python
 PYTHONHOME=/usr/lib/python2.6
 PYTHONPATH=/usr/lib/python2.6 

Затем, когда я набрал "whereis python", вот результаты.

python: /usr/bin/python2.4 
/usr/bin/python 
/usr/lib/python2.4 
/usr/lib/python2.6 
/usr/local/bin/python 
/usr/include/python2.4 
/usr/include/python2.6 
/usr/share/man/man1/python.1.gz

Потом когда я набрал which pythonуказал на usr/bin/python, Когда я набрал python -Vпоказала python 2.4.3, Кажется, указывает на 2.4.3. Затем, когда я использовал команду

python -c "import sys; print '\n' .join(sys.path)"

это показало

 /usr/lib64/python24.zip
    /usr/lib64/python2.4
    /usr/lib64/python2.4/plat-linux2
    /usr/lib64/python2.4/lib-tk
    /usr/lib64/python2.4/lib-dynload
    /usr/lib64/python2.4/site-packages
    /usr/lib64/python2.4/site-packages/Numeric
    /usr/lib64/python2.4/site-packages/gtk-2.0
    /usr/lib/python2.4/site-packages

Я попытался найти пути Python 2.6, набрав find / -name python2.6показала

/usr/include/python2.6
/usr/lib/python2.6
/usr/lib64/python2.6

Вот мои вопросы:

  1. Как я могу изменить результаты замены с on-liner выше на python 2.6?
  2. Почему я не могу найти каталог, такой как /usr/bin/python2.6 или же /usr/local/bin/python2.6? Означает ли это, что я установил свой python 2.6 неправильно или случайно удалил каталог? Что-то не так с результатами, которые я получил от тех команд, которые я ввел?
  3. Любая идея, как заставить систему выполнять Python 2.6, когда я использовал "hg push"?
  4. Должен ли я снова установить python 2.6 в /usr/local/bin?

1 ответ

  1. Установите http://virtualenv.org/ и virtualenvwrapper (у меня сработало easy_install, но не забудьте добавить строку source /usr/local/bin/virtualenvwrapper.sh в ваш скрипт запуска оболочки, а затем поставьте скрипт запуска для использования оболочки)
  2. Бежать mkvirtualenv -p /usr/lib/python2.6 ENVNAME (где ENVNAME это то, что вы хотите назвать, может быть hg?)
  3. добавлять workon ENVNAME в ваш сценарий инициализации оболочки (.profile, .*shrc и т. д.)

Теперь ваша система все еще сможет использовать 2.4, а все ваши оболочки будут использовать 2.6. Будьте осторожны, так как это может привести к прерыванию вызовов к другим установленным системой приложениям, если их зависимости отсутствуют в вашей виртуальной среде. Но, поскольку у вас теперь есть пункт, это должно быть легко pip install $WHATEVER_IS_MISSING (или запустить deactivate команда выйти из вашей виртуальной среды, сделать свое дело, и workon вернуться туда, где вы были).

Если вы обнаружите, что экземпляры hg запускаются процессами вне оболочек (например, интеграцией файлового менеджера?), Тогда я рекомендую поместить этот небольшой скрипт на ваш путь и настроить эти процессы для его вызова вместо этого.

#!/bin/bash # or whatever your shell is
workon ENVNAME
hg $*

(Обратите внимание, вы можете отключить (ENVNAME) подскажите настройкой VIRTUAL_ENV_DISABLE_PROMPT раньше в вашем скрипте инициализации, чем workon линия)

Другие вопросы по тегам