Я изменил свою версию на Python, но это не & ldquo; take & rdquo; везде?

Свободные Убунтуры. У меня есть странная проблема, которую я потратил некоторое время, пытаясь отладить, и позже я довольно тщательно искал данные по ней, но безуспешно.

У меня довольно новый сервер, на котором работает Lucid Lynx, и я пытаюсь переключить версию Python по умолчанию на 2.7. Я протестировал все приложения, которые я запускаю, и они, кажется, хорошо работают на 2.7 - и это не критически важный сервер, поэтому я могу выйти из строя и вернуться, если захочу.

Я сделал домашнее задание, установил 2.7, изменил программные ссылки в / usr / bin и отредактировал мой / usr / share / python / debian_defaults, чтобы сделать версию по умолчанию python2.7. Затем я попробовал «python» из командной строки для «root» и «для некоторой случайной учетной записи пользователя», получил python 2.7 и вычистил руки.

Это было пару месяцев назад, и до сегодняшнего дня все работало нормально.

Я пытался запустить демона Python, но он продолжал таинственно проваливаться. Я отследил его до пакета, который не был установлен - но это было ...

После некоторой отладки я обнаружил, что на самом деле, когда я запускаю скрипт Python как демон, он запускает Python 2.6.5 - но если я запускаю тот же сценарий из командной строки, он запускает Python 2.7.2 - и я, конечно, не установил новую библиотеку для Python 2.6. (Я использую библиотеку демонов Python для запуска скрипта как демона ...)

Но все мои скрипты начинаются с #! / Usr / local / bin / python, версии, которую я недавно установил, и /usr/local/bin/python --version возвращает 2.7.2. На самом деле я изменил #! строка явно указывает на Python 2.7, и он все равно терпит неудачу точно так же.

Позже я обнаружил, что если я запускаю программу в pdb, отладчике python, я также получаю версию 2.6.

Я думаю, что ключ в том, что ни pdb, ни бегун демонов не обращают внимания на #! линия - но я не могу получить дальше, чем это.

С благодарностью обращаемся к вам за помощью.

РЕДАКТИРОВАТЬ: Некоторые хорошие предложения ниже - если бы моя карма Stackoverflow достигала здесь, я бы их проголосовал - но без хороших результатов (см. Комментарии ниже). Разрешение: сбросить Python 2.6.

2
задан 13 March 2012 в 08:09

4 ответа

Try sudo update-alternatives --config python

Ubuntu / Debian имеет альтернативную систему, которую он использует в случае, когда есть несколько программ, которые делают то же самое. См. man 8 update-alternatives для получения дополнительной информации.

0
ответ дан 13 March 2012 в 08:09

У меня нет серебряной пули, но у меня есть пара предложений. Когда я запускаю следующую команду:

$ ls -al /usr/bin/pdb*

я получаю это (я на Ubuntu 11.10):

lrwxrwxrwx 1 root root  6 2012-02-16 20:53 /usr/bin/pdb -> pdb2.7
lrwxrwxrwx 1 root root 23 2012-02-01 09:17 /usr/bin/pdb2.5 -> ../lib/python2.5/pdb.py
lrwxrwxrwx 1 root root 23 2011-08-11 06:04 /usr/bin/pdb2.6 -> ../lib/python2.6/pdb.py
lrwxrwxrwx 1 root root 23 2012-02-16 20:53 /usr/bin/pdb2.7 -> ../lib/python2.7/pdb.py

Так что для pdb вам может понадобиться изменить символическую ссылку. [ 116]

Вы также можете попробовать эту команду (обновление-альтернативы находится в хранилище, если оно еще не установлено на вашем компьютере):

sudo update-alternatives --config python

Это должно прояснить, какая у вас версия Python по умолчанию, и позволить вам выполнить сброс она.

Наконец, есть virtualenv и python-brew для явного управления версией python, которую вы запускаете в системе с несколькими версиями. У меня нет опыта работы с python-brew, но мне нравится, как virtualenv аккуратно упаковывает среды Python. Если вы не знакомы с ним, эта статья может представлять интерес:

http://mirnazim.org/writings/python-ecosystem-introduction/

0
ответ дан 13 March 2012 в 08:09

Я предполагаю, что вы пытаетесь получить поддержку, чтобы хорошо играть с апгрейдом Python. Вы пробовали /usr/bin/python /opt/myservice.py? Как уже упоминали другие альтернативы обновления, это способ, которым вы должны это делать. Они, возможно, не применили это, чтобы выскочить все же.

0
ответ дан 13 March 2012 в 08:09

Eep. Вы хорошо выходите из мира вещей, которые вы можете изменить без серьезных поломок:)

Да, вы можете без каких-либо проблем компилировать и устанавливать любые питоны, которые вы хотите в /usr/local. Если вы хотите, чтобы одна из них была командой python, вы также можете сделать это, поместив такую ​​символическую ссылку в /usr/local/bin/.

Вы действительно не хотите касаться /usr/share/python/debian_defaults или возиться с любой из символических ссылок в /usr/bin.

Вы управляете демоном из выскочки? Может быть, /usr/local/bin нет в вашем PATH?

0
ответ дан 13 March 2012 в 08:09

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

Похожие вопросы: