Как заставить 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
Вот мои вопросы:
- Как я могу изменить результаты замены с on-liner выше на python 2.6?
- Почему я не могу найти каталог, такой как
/usr/bin/python2.6
или же/usr/local/bin/python2.6
? Означает ли это, что я установил свой python 2.6 неправильно или случайно удалил каталог? Что-то не так с результатами, которые я получил от тех команд, которые я ввел? - Любая идея, как заставить систему выполнять Python 2.6, когда я использовал "hg push"?
- Должен ли я снова установить python 2.6 в /usr/local/bin?
1 ответ
- Установите http://virtualenv.org/ и virtualenvwrapper (у меня сработало easy_install, но не забудьте добавить строку
source /usr/local/bin/virtualenvwrapper.sh
в ваш скрипт запуска оболочки, а затем поставьте скрипт запуска для использования оболочки) - Бежать
mkvirtualenv -p /usr/lib/python2.6 ENVNAME
(гдеENVNAME
это то, что вы хотите назвать, может бытьhg
?) - добавлять
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
линия)