2015-04-14 3 views
0

я бег моего питона скрипт sudo, он бросает исключение, то я обнаружил, что версии питона отличаются следующим образом, я использую CentOS 6:питона имеет несколько версий для разных пользователей

[[email protected]]$ sudo python --version 
Python 2.6.6 
[[email protected]]$ sudo su - 
[[email protected] ~]# python --version 
Python 2.7.5 
[[email protected]]$ python --version 
Python 2.7.5 

Когда Я вхожу в систему как root или мое имя пользователя, версия python - 2.7, но когда я использую sudo для запуска, это 2.6.

Может ли кто-нибудь сказать мне, как сделать их всех версией 2.7, что мне настроить?

ответ

2

Calling python средства для вызова первого исполняемым этого имени в каталоге, на который указывает переменная $PATH среды. Очевидно, что у ваших разных пользователей разные переменные $PATH. Я предлагаю взглянуть на них, чтобы понять, какой исполняемый файл вызывается (это может быть /usr/local/bin/python против /usr/bin/python или тому подобное). Чтобы просмотреть, что вы вызываете, используйте type python один раз в качестве пользователя и один раз в качестве пользователя root.

Чтобы вызвать конкретный двоичный код Python, вы можете вызвать явный полный путь (например, /usr/local/bin/python). Это вызовет тот же исполняемый файл независимо от значения переменной $PATH.

В качестве альтернативы вы можете настроить свои учетные записи таким образом, чтобы оба они имели один и тот же двоичный код сначала в переменной $PATH.

Кроме того, вы можете попытаться позвонить python2.7 и python2.6; многие установки связывают их с соответствующими двоичными файлами.

+0

, когда я набираю 'sudo su'', а затем запускаю python, он использует 2.7.14, но когда я набираю' sudo python', он использует 2.7.5 , Как сделать sudo python использовать версию 2.7.14? – Manoj

+0

Моей первой идеей было бы: удалить устаревшее 2.7.5. Нет никаких оснований держать его, потому что с 2.7.5 до 2.7.14 были только исправления, никаких изменений функций. Если программа не полагается на наличие ошибки, она не нуждается в устаревшей версии. Но я понимаю, что это может быть сложно, в зависимости от вашей установки и т. Д. Таким образом, вы можете использовать полные имена путей, такие как '/ path/to/2.7.14/python', или вы можете создавать символические ссылки, такие как'/usr/local/bin/python2.7.newest ->/path/to/2.7.14/python', а затем используйте 'python2.7.newest' в ваших скриптах. – Alfe

+0

Btw, 'sudo python' не выполняет полный вход в качестве пользователя root, поэтому у вас все равно будет' $ PATH' вашего локального пользователя. Поэтому я предполагаю, что пользователь будет иметь 2.7.5 при вызове 'python'. Возможно, вы просто хотите исправить «$ PATH» этого пользователя, чтобы указать на более новую версию. – Alfe

1

Я бы порекомендовал бежать which python и sudo which python, чтобы выяснить, какие различные сценарии вы используете. Также смотрите эту ссылку https://superuser.com/questions/600349/why-sudo-python-and-python-in-terminal-start-two-different-versions-python

+0

Я хочу использовать python 2.7.14, поэтому я отредактировал файл '/ etc/sudoers' и добавил'/usr/local/python2.7' перед '/ bin', потому что'/bin' имеет '2.7.5' и '/ usr/local/python2.7' имеет' 2.7.14'. Но все же, когда я набираю 'sudo, какой python', он выводит'/bin/python' – Manoj

Смежные вопросы