Свободные Убунтуры. У меня есть странная проблема, которую я потратил некоторое время, пытаясь отладить, и позже я довольно тщательно искал данные по ней, но безуспешно.
У меня довольно новый сервер, на котором работает 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.
Try sudo update-alternatives --config python
Ubuntu / Debian имеет альтернативную систему, которую он использует в случае, когда есть несколько программ, которые делают то же самое. См. man 8 update-alternatives
для получения дополнительной информации.
У меня нет серебряной пули, но у меня есть пара предложений. Когда я запускаю следующую команду:
$ 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. Если вы не знакомы с ним, эта статья может представлять интерес:
Я предполагаю, что вы пытаетесь получить поддержку, чтобы хорошо играть с апгрейдом Python. Вы пробовали /usr/bin/python /opt/myservice.py
? Как уже упоминали другие альтернативы обновления, это способ, которым вы должны это делать. Они, возможно, не применили это, чтобы выскочить все же.
Eep. Вы хорошо выходите из мира вещей, которые вы можете изменить без серьезных поломок:)
Да, вы можете без каких-либо проблем компилировать и устанавливать любые питоны, которые вы хотите в /usr/local
. Если вы хотите, чтобы одна из них была командой python
, вы также можете сделать это, поместив такую символическую ссылку в /usr/local/bin/
.
Вы действительно не хотите касаться /usr/share/python/debian_defaults
или возиться с любой из символических ссылок в /usr/bin
.
Вы управляете демоном из выскочки? Может быть, /usr/local/bin
нет в вашем PATH
?