Як встановити останню Python 2.7.X або 3.X на Ubuntu?


183

Я хочу встановити останню програму Python tarball на Ubuntu, завантажену з http://python.org/download/ .

Це правильний спосіб встановлення?

./configure
make
make install

Якщо ні, то як це зробити?


1
Свого часу, я думаю, це запитували для того, щоб встановити нову версію python на Ubuntu. Тепер потрібно встановити старішу версію python на Ubuntu (адже для нас ще потрібен python 2.7 для багатьох речей) ... tl; dr: ця відповідь більше не є поточною / правильною. Натомість, якщо припустимо, що python3 встановлений за замовчуванням (і, можливо, мінімальний python2.x), тоді запустіть:sudo apt-get install python-2.7 python-pip
michael

@michael_n про що ти говориш? компіляція з джерела не робить цю відповідь неправильною або застарілою. це просто інший метод. ви можете використовувати apt, щоб автоматизувати процес для вас, якщо потрібно.

Ви використовуєте те, що вам потрібно. Я не розумію, як це підтримує ваше твердження про застарілість. як ви сказали самі, ви використовуєте його, коли вам потрібно, тому що він може бути недоступним. Наприклад, підсистема Windows для Linux використовує деякі застарілі програмні пакети, навіть через дистрибутив є ubuntu 16.04.1 (бета-версія) і використовує python2.6.2, а python3 навіть поточним є python2.7.12. У такому випадку я повинен зібрати, якщо хочу

1
@jargonjunkie Ви поза темою, але правильно. Якщо питання "як встановити python 2.7 на ubuntu 16.04+", який він є (оскільки 16.04 тепер доступний, що моє значення), то ви просто sudo apt-get install python2.7. Це не тільки простіше, це єдино правильна відповідь, оскільки це єдиний спосіб, коли ви зможете обробляти встановлення модулів python через apt-get та їх залежності.
Майкл

сподіваюся, що це допоможе проілюструвати (додана відповідь). екосистема python дуже особлива / вибаглива, і ви можете легко потрапити в "пекло залежності", якщо не будете ретельно конструювати ваше середовище python askubuntu.com/a/831075/17060
michael

Відповіді:


199

Спочатку встановіть деякі залежності:

sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Потім завантажте за допомогою наступної команди:

version=2.7.13
cd ~/Downloads/
wget https://www.python.org/ftp/python/$version/Python-$version.tgz

Витягніть і перейдіть до каталогу:

tar -xvf Python-$version.tgz
cd Python-$version

Тепер встановіть за допомогою команди, яку ви тільки що спробували, використовуючи checkinstallнатомість, щоб полегшити видалення при необхідності:

./configure
make
sudo checkinstall

Перейдіть versionна потрібну версію ( version=2.7.1або version=3.6.0, наприклад,).


20
Використовуйте, sudo make installа не altinstallвстановлюйте його як версію пітона за замовчуванням
Шагун Содхані

використовувати, CXX=g++ ./configureякщо ./configure видає попередження про те, що g ++ не знайдено
srj

2
після встановлення, як описано вище, які команди я запускаю в консолі, щоб перевірити, чи дійсно вона встановлена?
J86

9
Досить неординарно, що найкраща відповідь на просте запитання "як встановити Python" несе таке жахливе попередження, це як "це найкращий спосіб, який ми знаємо, щоб встановити Python, і це може дуже зламати вашу систему" ... Це також дуже дивно, що на офіційному веб-сайті Python є безліч завантажень і не одна сторінка інструкцій з встановлення.
паб

4
pat - найкраща відповідь на просте запитання "як встановити python" sudo apt-get install python, тим складнішою є відповідь "як встановити останній python", що означає "з джерела". У вас виникне однакова проблема в будь-якій ОС, якщо ви не встановлюєте попередньо складені бінарні файли від сторонніх розробників, що, знов, є ризиковим для будь-якої ОС (і сильно відрізняється в різних ОС). Також ця відповідь є з 2012 року; для отримання останніх порад див. askubuntu.com/questions/101591/…
michael

181

Якщо у вас дійсно не виникає горіння скласти його самостійно, кращим способом є використання PPA DeadSnakes для встановлення версій Python, які не включені за замовчуванням:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python2.7

Також доступні й інші версії, такі як python2.4або python3.6тощо.


13
Примітка до програми: Якщо ви 10.04, вам може знадобитися встановити властивості python-software перед використанням add-apt-сховища.
Крейг Малоні

3
Рекомендується створювати python у вашому локальному середовищі, а не встановлювати його з попередньо
створених

16
+1 :)really have a burning desire to compile it yourself
Ватт

5
Не зазначається, що: 1. ppaофіційно не затверджено, тому найбільш безпечним способом є побудова з джерела. 2. Це призведе до глобального пітона, який не sudoможе змінювати або встановлювати пакети, а не локальний. 3. Кілька пітонів можна встановити локально в різних місцях, будуючи з джерела.
Іоанніс Філіппідіс

2
apt-get install python2.7Це встановить бінарний python2.7 замість python ... потворно !!
Dhawal

26

Продовжуючи документувати це для останніх версій Ubuntu 1 : для сервера Ubuntu 16.04.1 стандартним Python є версія 3.5, а Python 2.7 не встановлений за замовчуванням. У новому встановленні (зауважте, що немає навіть pythonвиконуваного файлу):

$ type python3 python2 python 
python3 is /usr/bin/python3
-bash: type: python2: not found
-bash: type: python: not found

$ python3 --version 
Python 3.5.2

$ python --version 
The program 'python' can be found in the following packages:
 * python-minimal
 * python3
Try: sudo apt install <selected package>

Примітка: перш ніж продовжувати, ви, ймовірно, захочете зробити швидку sudo apt-get update, sudo apt-get upgradeі sudo apt-get dist-upgrade(будь ласка, відмітьте, що саме ці команди виконують насправді; я припускаю, що тут буде встановлено нове.)

Встановити python 2.7 так само просто:

$ sudo apt-get install python2.7

Початковий вихід встановлення python 2.7 такий:

$ sudo apt-get install python2.7
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7-minimal
Suggested packages:
  python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libpython2.7-minimal libpython2.7-stdlib python2.7 python2.7-minimal
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,735 kB of archives.
After this operation, 15.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc, etc...

Після установки python 2.7,

$ type python3 python2.7 python3.5 python2 python
python3 is /usr/bin/python3
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5
bash: type: python2: not found
bash: type: python: not found

Але проблема все ще є, оскільки ви ще не можете встановити модулі PyPI через, pipнаприклад, якщо ви хочете ноутбук jupyter, або найновіший scipy або numpy (тощо), ви захочете встановити pipі потім pip installті, і все ще звертаєтесь до apt-getвстановити будь-які необхідні системні залежності, наприклад, графікз або основні системні бібліотеки.

$ type pip3 pip2 pip
bash: type: pip3: not found
bash: type: pip2: not found
bash: type: pip: not found

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Отже, знову встановити pip, це так просто, як sudo apt-get install python-pip:

$ sudo apt-cache search -n pip | egrep '^python[0-9]*-pip'
python-pip - alternative Python package installer
python-pip-whl - alternative Python package installer
python3-pip - alternative Python package installer - Python 3 version of the package

Вам знадобиться як python-pipдля Python 2.7, так pipі python3-pipдля Python 3 pip. Установка через apt-getобов'язково встановить необхідні залежності; наприклад, ось вихід для установки pip2:

$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip-whl
  python-pkg-resources python-setuptools python-wheel python2.7-dev
Suggested packages:
  binutils-doc debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib
  autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib gcc-5-locales libgcc1-dbg
  libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg
  libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg glibc-doc libstdc++-5-doc make-doc python-doc
  python-tk python-setuptools-doc
The following NEW packages will be installed:
  binutils build-essential dpkg-dev fakeroot g++ g++-5 gcc gcc-5 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libatomic1 libc-dev-bin libc6-dev
  libcc1-0 libcilkrts5 libdpkg-perl libexpat1-dev libfakeroot libfile-fcntllock-perl libgcc-5-dev
  libgomp1 libitm1 liblsan0 libmpx0 libpython-all-dev libpython-dev libpython-stdlib libpython2.7
  libpython2.7-dev libquadmath0 libstdc++-5-dev libtsan0 libubsan0 linux-libc-dev make
  manpages-dev python python-all python-all-dev python-dev python-minimal python-pip
  python-pip-whl python-pkg-resources python-setuptools python-wheel python2.7-dev
0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded.
Need to get 61.1 MB of archives.
After this operation, 169 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...etc...

У результаті цього відбувається щось цікаве: тепер у вас є "стандарт" (і рекомендується PEP) python2і python3(які просто посилаються на python 2.7 та python 3.5):

$ type python3 python2 python python2.7 python3.5 
python3 is /usr/bin/python3
python2 is /usr/bin/python2
python is /usr/bin/python
python2.7 is /usr/bin/python2.7
python3.5 is /usr/bin/python3.5

Ви також захочете sudo apt-get install python3-pip; перед встановленням у вас є:

$ type pip pip2 pip3
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
-bash: type: pip3: not found

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
/usr/bin/python3: No module named pip

Після установки pip3,

$ sudo apt-get install python3-pip
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-setuptools python3-wheel python3.5-dev
Suggested packages:
  python-setuptools-doc
The following NEW packages will be installed:
  libpython3-dev libpython3.5-dev python3-dev python3-pip python3-setuptools python3-wheel python3.5-dev
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.0 MB of archives.
After this operation, 55.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
...etc...

Отримані версії:

$ type python python2 python3 pip pip2 pip3
python is /usr/bin/python
python2 is hashed (/usr/bin/python2)
python3 is hashed (/usr/bin/python3)
pip is /usr/bin/pip
pip2 is /usr/bin/pip2
pip3 is /usr/bin/pip3

$ pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip3 --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

$ python2 -m pip --version 
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ python3 -m pip --version 
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)

І остання річ, перш ніж ви зможете розпочати встановлення всіх улюблених модулів Python PyPI: вам, мабуть, доведеться оновити pip (і pip2, і pip3, окремо; також не має значення, чи pipбуде викликано його через pythonвиконувану версію або pipвиконувані файли, фактичні оновлення зберігаються в /usr/lib):

$ sudo -H python2 -m pip install --upgrade pip
...
$ sudo -H python3 -m pip install --upgrade pip
...

Тепер ви можете запускати або окрему, pipабо версію в комплекті python(через python -m pip {command}).


[1] Історичний підсумок: старший Ubuntu мав лише Python 2.6, тому всі різні методи встановлення Python 2.7+. Пізніше, після того, як Python 2.7 був доданий до загальнодоступних сховищ, у нас все ще було те саме завдання встановити найновіший Python 2.7 з останніми виправленнями, що було (занадто) часто необхідним. Сьогодні ситуація набагато краща / простіша: нинішні Python 2.7 та 3.5 (в основному єдині дві версії платформи Python, про які люди піклуються), які зараз перебувають у загальнодоступних репортах, є дуже стабільними, тому зараз нам справді варто потурбуватися про встановлення останніх модулі python , не останній python . Тож тепер "остання версія проблеми" Python частково перемістилася з aptрепозиції ОС та в PyPI & pip.)


2
Дотримуючись цієї інструкції на Ubuntu 16.04.1 LTS успішно налаштуйте python 2.7 та pip так: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install - оновлення pip; # Версія перевірки: $ pip --version -> pip 9.0.1 з /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
Роберт Луйо

Вибачте моє незнання, але чи можу я знати, що означає "хеш" під час показу версій Python?
Не вдалося вченому

1
@TalhaIrfan Це гарне запитання (і, якщо ви дозволите спрощену відповідь): коли команда вводиться в bash (як w / більшість оболонок), cmd може бути псевдонімом, функцією або виконуваним файлом, знайденим у $PATH. Env var PATH- це довгий список каталогів з буквально тисячами файлів. Щоб пришвидшити пошук виконуваного файлу, оболонка використовує кешований хештел для швидкого пошуку. Це може стати затхлим, тому "хеширований" дає вам знати, що він "запам'ятав" цю команду, відображену у виконаному
michael

@michael Дякую велике! Це дійсно корисна відповідь: Коротка та точна!
Не вдалося вченому

1
@gaia ви можете задати окреме запитання, оскільки для розв'язання цього питання може знадобитися більше назад або вперед (або якщо щось змінилося з моменту написання цього запису). Можливо, спочатку перевірте, що обидва pip (2.7) та pip3(3.x) були повністю встановлені / оновлені, а не лише колишні - тобто, sudo apt-get install python-pip python3-pipі sudo -H python2 -m pip install --upgrade pipта sudo -H python3 -m pip install --upgrade pip ... Або, якщо це дійсно питання про дозвіл (позначено "він працює з судо "), то відстежити це буде трохи складніше.
Майкл


4

Ви також можете завантажити та встановити його через pyenv

#Install Pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
export PATH=~/.pyenv/bin:/usr/local/hadoop/bin/:$PATH
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

#Install Python
pyenv install 2.7.8
pyenv global 2.7.8

pyenv install 3.4.5
pyenv global 3.4.5

Це найчистіший спосіб отримати справді актуальну версію Python на більш старій версії Ubuntu. Він включає підтримку virtualenv також через pyenv-virtualenvплагін, що дозволяє легко встановлювати програми з різними вимогами модулів без зіткнень.
RichVel

2
Два попередження про pyenv: (1) він працює лише з bash shell (або, можливо, zsh, але, звичайно, не тире, яке є / bin / sh на Ubuntu), і (2) йому потрібна оболонка входу (наприклад bash --login), яка не є завжди легко досягти, наприклад, від Ansible. Найкраще для інтерактивного використання, менш корисне для сценаріїв серверів.
RichVel

0

Переважно дзеркало цієї відповіді з підкрученим вступом

Я б рекомендував pyenv . Це автоматизує процес збирання окрім встановлення залежностей заголовка (див. Нижче). Ви можете створити та встановити нову (або стару) версію Python, просто сказавши pyenv install 3.6.0. Все працює як ваш користувач, тому вам не доведеться турбуватися про те, щоб зіпсувати Python, використовуваний самим Ubuntu.

На відміну від деяких опцій на основі apt-repo (наприклад, глухих змій), як правило, він буде працювати в той самий день випуску після цього, pyenv updateоскільки вам не потрібно чекати, коли хтось інший пакує його. Перегляньте всі версії, з якими можна встановитиpyenv install --list

Встановити pyenv

  1. Встановіть інструменти та заголовки, необхідні для створення CPythons (екзотичні пітони, такі як PyPy чи Jython, можуть мати інші залежності). Git використовується pyenv, плюс він також дозволяє будувати / встановлювати вихідні гілки, так що ви можете встановити будь-який 3.8 зараз, тобто головну гілку CPython fresh off GitHub:

    sudo apt-get install -y git
    sudo apt-get install -y build-essential libbz2-dev libssl-dev libreadline-dev \
                            libffi-dev libsqlite3-dev tk-dev
    
    # optional scientific package headers (for Numpy, Matplotlib, SciPy, etc.)
    sudo apt-get install -y libpng-dev libfreetype6-dev    
    
  2. Запустіть сценарій інсталятора (встановлює pyenv та деякі дуже корисні плагіни pyenv оригінальним автором; див. Тут докладніше)

    curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  3. Додайте рядки init до свого ~/.profileабо ~/.bashrc(він згадує його в кінці сценарію встановлення):

    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    
  4. Перезавантажте оболонку (закрийте та відкрийте або exec $SHELL) або перезавантажте сценарій профілю. (наприклад, з source ~/.bashrc)

Готово!

Створення середовища

Якщо не торкатися системи Python (як правило, погана ідея; служби на рівні ОС можуть покладатися на деякі конкретні версії бібліотеки тощо), створити власне середовище, це просто! Ще краще, ні sudo, для цього чи pipвстановлює!

  1. Встановіть бажану версію Python (це завантажить джерело та створить його для вашого користувача, введення не потрібно)

    pyenv install 3.6.0
  2. Зробіть це virtualenv, щоб ви могли пізніше зробити інших, якщо хочете

    pyenv virtualenv 3.6.0 general
  3. Зробіть це глобально активним (для вашого користувача)

    pyenv global general
  4. Робіть те, що ви хочете, з Python / pip тощо. Це ваше.

Якщо ви хочете пізніше очистити свої бібліотеки, ви можете видалити virtualenv ( pyenv uninstall general) або зробити нову ( pyenv virtualenv 3.6.0 other_proj). Також у вас може бути активне середовище для кожного каталогу: pyenv local other_projвін видалить .python-versionфайл у вашу поточну папку, і кожного разу, коли ви будете викликати Python або встановлені на Pip утиліти Python з нього або під ним, вони будуть переливаються pyenv.

Вирішення проблем

  • bash: pyenv: command not found, fish: Unknown command 'pyenv'

    1. Перевірте $PATH, має бути один запис, який закінчується чимось на кшталт .pyenv/bin. Якщо він відсутній, переконайтеся, що ви дотримувались №3 І №4 (перезавантажте оболонку) у розділі Встановити pyenv вище.
  • pyenv: no such command 'virtualenv'

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