Дві версії python на Linux. як зробити 2.7 за замовчуванням


124

У мене на linuxbox дві версії 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
Коли я зробив це у своїй Fedora, yum або apt-get вже не працювали.
Користувач

@User: Так, я порушив давню мандрагору аналогічно (змінивши /usr/bin/env pythonзначення на 2,6, а не 2,3 означало половину команд, rpmі всі urpmiперестали працювати).
abarnert

Я виконав наступний крок, щоб встановити Django на Centos 5: 1-й, встановити Python 3.6 з вихідного коду. 2-е: в оболонці введіть таку команду "псевдонім python = / usr / local / bin / python3.6" 3rd: запустіть наступну команду для встановлення Django "pip3 install Django" 4th: "python -m django --version" для перевірки Джанго встановлено з версією "1.10.5"
показує шоу

для мене /usr/bin/pythonбуло м'яке посилання, що вказувало на python2. Я щойно змінив цеpython3.6
1717

Відповіді:


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.


1
:( Ви маєте рацію. На жаль, я вже створив нове посилання на symb відповідно до відповіді @ 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), зробіть записку про те, що там, і резервну копію ...
abarnert

який поганий безлад я потрапив у себе !! У мене є ще одна скринька центів, яка може мати цей сценарій. Якщо я скопіюю його звідти і покладу в / 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 себе… але я все ж думаю, що це не те, що ОП насправді хоче.
abarnert

Це допомогло мені після оновлення з 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"

Отже, видаліть пітон Softkey

sudo rm -r python

потім повторіть вищевказану команду

ls -l

ви бачите, що програмне забезпечення видалено

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

Потім створіть нове програмне посилання для 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
Ваше повідомлення не є відповіддю на питання ОП.
Франк

Це вирішило для мене дуже дивну проблему. Коли я перевіряю версію python з кореневого або звичайного терміналу, він показав 3.6.8, але якщо я створюю .sh і ввожу python -версію всередині, друкується 2.7. Виявляється, це було тому, що існувало софтпосилання, як згадувалося вище. Виконайте кроки і це виправлено. Дякую.
S4nd33p

Дякую! Це вирішило мені проблему "необхідного пітона 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. і ваша версія пітону за замовчуванням буде встановлена ​​в / usr / local / bin. тобто при введенні пітона ви отримаєте 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 все ще не набуває чинності як версія за замовчуванням, яку вам потрібно буде зробити

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 та оновіть його.

Обробка пакунків залежить від розповсюдження, яке ви використовуєте.


5
Пакет Python майже точно вимагає дистрибутива. CentOS заснований на RPM, а половина інструментів RPM та YUM написані на Python.
abarnert

Шановний Майкл, будь ласка, порадьте можливість видалити встановлений python2.7 вручну!
AVA

Простим рішенням буде видалення всього під / usr / local /, але таким чином ви видалите все, що ви склали та встановили вручну. Немає хорошого способу відстежити, які файли належать до того, яке програмне забезпечення в / usr / local, і тому встановлення будь-чого там, як правило, не рекомендується. Можливо, у вас там є лише пітон. Якщо / usr / local / bin містить лише виконувані файли python, ви маєте хороший шанс, що видалення нічого іншого не порушить.
emesik

2
Ніколи не слід видаляти python. Візьми це у мене. Я це зробив, і це порушило мою систему. Від цього залежить багато додатків. Це дуже необдумано.
Патрік Мутвірі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.