Ошибка импорта Python при выполнении Mercurial - PullRequest
2 голосов
/ 02 февраля 2012

Моя система - RedHat 5 Linux и по умолчанию установлен Python 2.4. Чтобы выполнить Mercurial1.81, я попытался обновить python с 2.4 до 2.6 и сохранить его в другом каталоге.

Вот команды, которые я использовал:

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

Я пытался удалить жесткую ссылку, используемую для связи между python и python2.6. тогда я использовал команды как:

 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
 PATHONHOME=/usr/lib/python2.6
 PATHONPATH=/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

Затем, когда я набрал «какой питон», он указал «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 выше на python2.6?
(2) Почему я не могу найти каталог, такой как /usr/bin/python2.6 или /usr/local/bin/python2.6? Означает ли это, что я неправильно установил свой python2.6 или случайно удалил каталог?
Что-то не так с результатами, которые я получил от введенных команд?
(3) Есть идеи, как заставить систему выполнять python2.6, когда я использовал «hg push»?
(4) Должен ли я снова установить python2.6 в / usr / local / bin?

Большое спасибо,

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Ваша ртутная установка находится в /usr/lib64/python2.4/site-packages/mercurial. Эта конкретная установка потребует Python 2.4. И первая строка /usr/bin/hg, вероятно, такова:

#!/usr/bin/python

При условии, что вы используете пакет из официальных репозиториев, Mercurial будет зависеть от версии Python по умолчанию точно 2.4. Так что возиться с /usr/bin/python не очень хорошая идея. Если это действительно беспокоит вас, вы можете easy_install один на вашем новом Python 2.6.

1 голос
/ 04 февраля 2012

Я бы предложил изменить /usr/bin/python на системный Python 2.4, чтобы избежать дестабилизации вашей системы. Сделайте это, вставив символическую ссылку на /usr/bin/python2.4, а затем добавив символическую ссылку /usr/local/bin/python на /usr/bin/python2.6.

Затем измените ваш путь в rc-файле вашей оболочки (например, ~ / .bashrc), чтобы сначала найти локальный питон (export PATH=/usr/local/bin:$PATH, если он еще не в этом порядке), затем отредактируйте первую строку /usr/bin/hg, #!/usr/bin/env python, чтобы он по умолчанию выполнялся в вашей пользовательской сессии.

Если python по какой-то причине все еще пытается загрузить неправильную версию библиотек python (2.4, когда вы запускаете двоичный файл python 2.6), вы можете изменить путь поиска, который исполняемый файл python будет использовать для поиска своего дома, с помощью команды Переменная окружения PYTHONHOME.

Однако, вероятно, лучше не изменять это в масштабе всей системы, поскольку в ОС может быть запущено множество скриптов python, которые могут быть несовместимы с Python 2.6. Попробуйте добавить его в rc-файл оболочки.

Если по какой-либо причине PYTHONHOME этого не делает, вы можете редактировать переменную окружения PYTHONPATH напрямую (в вашем файле rc), к которой вы можете добавить пути к библиотекам python 2.6.

Я предлагаю отразить вывод python -c "import sys; print '\n'.join(sys.path)".

Этот однострочник должен показывать пути python 2.6 при запуске python 2.6, но если он по-прежнему показывает пути 2.4, вы захотите заменить пути, которые он показывает, на правильные пути для python 2.6 (которые, вероятно, будут такими же , только с «6» вместо «4»)

...