Как установить последнюю версию Python 2.7.X или 3.X в Ubuntu?

183

Я хочу установить последний пакет Python для Ubuntu, загруженный с http://python.org/download/ .

Это правильный способ установки?

./configure
make
make install

Если нет, то как мне это сделать?

mohammads
источник
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 и их зависимости.
Майкл
надеюсь, это поможет проиллюстрировать (добавленный ответ). экосистема питона очень специфична / привередлива, и вы легко можете попасть в «ад зависимостей», если не будете тщательно строить свою среду питона askubuntu.com/a/831075/17060
майкл

Ответы:

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устанавливайте его как версию Python по умолчанию
Shagun Sodhani
используйте CXX=g++ ./configureif ./configure выдает предупреждение о том, что g ++ не найден
srj
2
после установки, как указано выше, какие команды я запускаю в консоли, чтобы проверить, действительно ли она установлена?
J86
9
Весьма необычно, что лучший ответ на простой вопрос «как установить Python» будет содержать такое ужасное предупреждение, это как «это лучший способ установить Python, который мы знаем, и он может очень хорошо сломать вашу систему» ​​... Это также очень удивительно, что официальный сайт Python имеет множество загрузок, а не одну страницу инструкций по установке.
patb
4
pat - лучший ответ на простой вопрос «как установить python» sudo apt-get install python, более сложный ответ - «как установить последний python», подразумевается «из исходного кода». У вас будет такая же проблема на любой ОС, если вы не устанавливаете предварительно скомпилированные двоичные файлы от стороннего производителя, что, опять же, опасно для любой ОС (и сильно различается в разных ОС). Также этот ответ с 2012 года; более свежие советы смотрите на сайте askubuntu.com/questions/101591/…
майкл
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, и т. Д. Также доступны.

brousch
источник
13
Примечание программы: если вы используете версию 10.04, вам может потребоваться установить python-software-properties перед использованием add-apt-repository.
Крейг Малони,
3
Рекомендуется
собирать
16
+1 :)really have a burning desire to compile it yourself
Watt
5
Упущено упомянуть, что: 1. ppaофициально не одобрен, поэтому самый безопасный способ - это сборка из исходного кода. 2. это приведет к глобальному питону, который другие пользователи не sudoсмогут изменять или устанавливать, а не к локальному. 3. Несколько питонов могут быть установлены локально в разных местах путем сборки из источника.
Иоаннис Филиппидис
2
apt-get install python2.7Это установить бинарный python2.7 вместо python ... некрасиво!
Дхавал
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установить любые необходимые системные зависимости, такие как graphviz или основные системные библиотеки.

$ 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)

И последнее, прежде чем вы сможете приступить к установке всех ваших любимых PyPI-модулей Python: вам, вероятно, придется обновить сам 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 установить python-pip; sudo -H python2 -m pip install --upgrade 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 (в виде большинства оболочек), cmd может быть псевдонимом, функцией или исполняемым файлом, найденным в $PATH. Env var PATH- это длинный список каталогов с буквально тысячами файлов в нем. Чтобы ускорить поиск исполняемого файла, оболочка использует кэшированную хеш-таблицу для быстрого поиска. Это может устареть, поэтому «хэширование» дает вам знать, что «запомнили» эту команду, сопоставленную с этим исполняемым файлом unix.stackexchange.com/questions/5609/…
майкл
@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 ... Или, если это действительно проблема с разрешениями (обозначается как «это работает с sudo "), тогда будет немного сложнее выследить.
Майкл
11

12,04

Если вы следуете ответу Ачу , то этот термин libread5-devследует изменить на libreadline-gplv2-dev. Таким образом, полная команда будет:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
Тот парень
источник
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 (или, может быть, zsh, но, конечно, не dash, который является / bin / sh в Ubuntu), и (2) он требует оболочки входа (например bash --login), которая не является всегда легко добиться, например, от Ansible. Лучше всего для интерактивного использования, менее хорошо для серверов сценариев.
RichVel
0

Главным образом зеркало этого ответа с измененной интро

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

В отличие от некоторых опций, основанных на apt-repo (например, deadsnakes), он, как правило, будет работать в тот же день после выпуска, pyenv updateпотому что вам не нужно ждать, пока кто-то другой упакует его. Посмотреть все версии, которые вы можете установить сpyenv install --list

Установить pyenv

  1. Установите инструменты и заголовки, необходимые для сборки CPythons (экзотические Python, такие как PyPy или Jython, могут иметь другие зависимости). Git используется pyenv, плюс он также позволяет собирать / устанавливать исходные ветки, так что вы можете установить любую версию 3.8 прямо сейчас, то есть основную ветку CPython, свежую из 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. Добавьте строки инициализации к вашему ~/.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. Сделайте это виртуальным, чтобы вы могли сделать других позже, если хотите

    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.
Ник Т
источник