Две версии python для linux. как сделать 2.7 по умолчанию

124

У меня в Linux есть две версии Python:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

Как я могу сделать 2.7 версией по умолчанию, чтобы при вводе pythonона переводила меня в 2.7?

Энтони
источник
1
Когда я сделал это с моей шляпой, yum или apt-get больше не работали.
Пользователь
@User: Да, я сломал древнюю Mandrake точно так же (изменение /usr/bin/env pythonна 2.6 вместо 2.3 означало, что половина команд rpmи все urpmiперестали работать).
abarnert 08
Я выполнил следующий шаг, чтобы установить Django на Centos 5: 1-е, установите Python 3.6 из исходного кода. 2-й: в оболочке введите следующую команду «alias python = / usr / local / bin / python3.6» 3-й: выполните следующую команду для установки Django «pip3 install Django» 4-й: «python -m django --version» для проверки Django установлен с версией "1.10.5"
showmyroutes
для меня /usr/bin/pythonбыла софт-ссылка, указывающая на python2. Я просто изменил его наpython3.6
munish

Ответы:

173

Вы, вероятно, действительно не хотите менять свой Python по умолчанию.

В вашем дистрибутиве установлен стандартный системный Python /usr/binи могут быть скрипты, зависящие от его наличия и выбранные пользователем #! /usr/bin/env python. Обычно вы можете обойтись без запуска скриптов Python 2.6 в 2.7, но хотите ли вы рискнуть?

Вдобавок к этому, обезглавливание с помощью /usr/binможет нарушить способность вашего менеджера пакетов управлять пакетами. А изменение порядка каталогов в вашем PATHфайле повлияет на многие другие вещи, помимо Python. (На самом деле, чаще бывает /usr/local/binвпереди /usr/bin, и это может быть то, что вы действительно хотите, но если у вас все наоборот, по-видимому, для этого есть веская причина.)

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


Во-первых, вы можете настроить псевдоним оболочки:

alias python=/usr/local/bin/python2.7

Введите это в командной строке или поместите в свой, ~/.bashrcесли вы хотите, чтобы изменение было постоянным, и теперь, когда вы вводите, pythonон запускает выбранную вами версию 2.7, но когда какая-то программа в вашей системе пытается запустить сценарий, /usr/bin/env pythonона запускает стандартную версию 2.6.


В качестве альтернативы, просто создайте виртуальную среду из вашего 2.7 (или отдельных venv для разных проектов) и выполняйте свою работу внутри venv.

abarnert
источник
1
:( Вы правы. К сожалению, я уже создал новую символьную ссылку в соответствии с ответом @rohit. Теперь моя yumкоманда не работает! Я попытался создать символьную ссылку обратно, но это не помогает sudo ln -sf /usr/bin/python2.6 /usr/bin/python?
Энтони,
@Anthony: Думаю, /usr/bin/pythonраньше это не было символической ссылкой , это был сценарий-оболочка или исполняемый файл, а теперь вы его перезаписали и не можете вернуть. Если rpmон все еще работает, вы можете вручную загрузить пакет Python и установить его без yum.
abarnert
Я все еще могу добраться до интерпретатора 2.6, когда печатаю, python2.6так что он все еще там.
Энтони
7
@Anthony: И в будущем, если кто-то скажет вам изменить что-то в / usr / bin (или где-нибудь в / usr, кроме / usr / local), запишите, что там, и
сделайте
в какой ужасный беспорядок я попал !! У меня есть еще одна коробка centos, в которой может быть этот сценарий. Если я скопирую его оттуда и помещу в / usr / bin этого поля. ты думаешь, это сработает?
Энтони
19

Добавьте /usr/local/binв свою PATHпеременную среды раньше в списке, чем/usr/bin .

Обычно это делается в rc-файле вашей оболочки, например, для bash вы должны поместить это в .bashrc:

export PATH="/usr/local/bin:$PATH"

Это приведет к тому , оболочке смотреть первую для pythonдюйма /usr/local/bin, прежде чем он идет с одним в /usr/bin.

(Конечно, это означает, что вам также нужно /usr/local/bin/pythonуказатьpython2.7 - если это еще не сделано, вам нужно будет создать символическую ссылку.)

янтарный
источник
Возможно, потребуется установить PYTHONHOME соответствующим образом / отключить его, если он чем-то установлен.
Марчин
1
Это не так опасно, как решения, предлагающие изменить сам / usr / bin… но я все же думаю, что это не то, чего на самом деле хочет OP.
abarnert 08
Это помогло мне после обновления Ubuntu 14.x до 16.x
learn2day
4

Введите команду

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

Здесь вы можете увидеть что-то вроде этого

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

ваш python2.7 по умолчанию связан с текстом "python"

Итак, удалите питон softlink

sudo rm -r python

затем повторите указанную выше команду

ls -l

вы можете видеть, что софтлинк удален

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

Затем создайте новую softlink для python3.6

ln -s /usr/bin/python3.6 питон

Затем попробуйте команду pythonв терминале

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

Введите help, copyright, creditsили licenseдля получения дополнительной информации.

Сринат
источник
1
Ваш пост не является ответом на вопрос OP.
Фрэнк
Это решило для меня очень странную проблему. Когда я проверяю версию python из корневого или обычного терминала, он показывает 3.6.8, но если я создаю .sh и набираю внутри python -version, это выводит 2.7. Оказывается, это произошло потому, что, как упоминалось выше, существовала softlink. Выполнил шаги, и это исправлено. Спасибо.
S4nd33p
Спасибо! Это решило мне проблему «требуется Python 3 или новее»
Тамим Аттафи
4

Проверьте текущую версию python:

$ python --version

затем проверьте, что python является символической ссылкой на какой файл.

  $ ll /usr/bin/python

Выход Ex:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

Проверьте другие доступные версии python:

$ ls /usr/bin/python*

Выход Ex:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

Если вы хотите изменить текущую версию python на версию 3.6, отредактируйте файл ~ / .bashrc:

vim ~/.bashrc

добавьте строку ниже в конец файла и сохраните:

alias python=/usr/local/bin/python3.6

Чтобы установить pip для python 3.6

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

В случае успеха проверьте текущую версию pip:

$ pip3 -V

Выход Ex:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)
Шив Буйя
источник
2

Все ОС поставляются с версией python по умолчанию, и она находится в / usr / bin. Все скрипты, которые поставляются с ОС (например, yum), указывают на то, что эта версия python находится в / usr / bin. Когда вы хотите установить новую версию python, вы не хотите нарушать существующие скрипты, которые могут не работать с новой версией python.

Правильный способ сделать это - установить python в качестве альтернативной версии.

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

Теперь, делая это, существующие скрипты, такие как yum, по-прежнему работают с / usr / bin / python. и ваша версия Python по умолчанию будет той, которая установлена ​​в / usr / local / bin. т.е. когда вы наберете python, вы получите 2.7.3

Это происходит потому, что. Переменная $ PATH имеет / usr / local / bin перед usr / bin.

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

Если python2.7 по-прежнему не вступает в силу в качестве версии python по умолчанию, вам необходимо сделать

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
Пракаш Каматх
источник
-8

Полагаю, вы установили версию 2.7 вручную, а 2.6 идет из пакета?

Простой ответ: удалите пакет python.

Более сложный: не устанавливайте вручную в / usr / local. Соберите пакет с версией 2.7, а затем обновите его.

Обработка пакетов зависит от того, какой дистрибутив вы используете.

emesik
источник
5
Пакет Python почти наверняка потребуется дистрибутиву. CentOS основан на RPM, а половина инструментов RPM и YUM написана на Python.
abarnert 08
Уважаемый Майкл, Посоветуйте, пожалуйста, вариант удаления установленного вручную python2.7!
AVA
Простым решением было бы удалить все в / usr / local /, но таким образом вы удалите все, что вы скомпилировали и установили вручную. Нет хорошего способа отследить, какие файлы какому программному обеспечению принадлежат в / usr / local, и по этой причине установка чего-либо там обычно не рекомендуется. Возможно, у вас там только питон. Если / usr / local / bin содержит только исполняемые файлы python, у вас есть хороший шанс, что удаление ничего не сломает.
emesik
2
Никогда не удаляйте python. Возьми это у меня. Я сделал это, и это сломало мою систему. От этого зависят многие приложения. Это очень опрометчиво.
Патрик Мутвири