¿Cómo instalo el último Python 2.7.X o 3.X en Ubuntu?

183

Quiero instalar el último tarball de Python en Ubuntu, descargado de http://python.org/download/ .

¿Es esta una forma correcta de instalar?

./configure
make
make install

Si no, ¿cómo hago eso?

Mahoma
fuente
1
En un momento, imagino que esto se pidió para instalar una versión más nueva de python en Ubuntu. Ahora, es necesario instalar una versión anterior de python en Ubuntu (porque todavía necesitamos python 2.7 para muchas cosas) ... tl; dr: esta respuesta ya no es actual / correcta. En su lugar, suponiendo que python3 esté instalado de manera predeterminada (y quizás un mínimo de python2.x), ejecute:sudo apt-get install python-2.7 python-pip
michael
@michael_n ¿de qué estás hablando? compilar desde la fuente no hace que esta respuesta sea incorrecta o desactualizada. Es solo un método diferente. puede usar apt para automatizar el proceso si es necesario.
Usas lo que necesitas. Realmente no veo cómo esto respalda su afirmación de que esto está desactualizado. como dijiste tú mismo, lo usas cuando lo necesitas porque puede que no esté disponible. Por ejemplo, el subsistema de Windows para Linux usa algunos paquetes de software anticuados incluso si la distribución es ubuntu 16.04.1 (beta) y usa python2.6.2, y python3 incluso si la actual es python2.7.12. En ese caso, debería compilar si quiero paquetes actualizados
1
@jargonjunkie estás fuera de tema, pero correcto. Si la pregunta es "¿cómo instalo Python 2.7 en ubuntu 16.04+", que es (ya que 16.04 ya está disponible, que es mi punto), entonces simplemente sudo apt-get install python2.7. Esto no solo es más fácil, es la única respuesta correcta, ya que es la única forma en que podrá manejar la instalación de módulos de Python a través de apt-get y sus dependencias a su vez.
michael
Espero que esto ayude a ilustrar (respuesta agregada). el ecosistema de Python es muy particular / quisquilloso, y puede entrar fácilmente en el "infierno de la dependencia" si no construye cuidadosamente su entorno de Python askubuntu.com/a/831075/17060
michael

Respuestas:

199

Primero, instale algunas dependencias:

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

Luego descargue usando el siguiente comando:

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

Extrae y ve al directorio:

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

Ahora, instale usando el comando que acaba de probar, en su checkinstalllugar, para facilitar la desinstalación si es necesario:

./configure
make
sudo checkinstall

Cambie versiona la versión que necesite ( version=2.7.1o version=3.6.0, por ejemplo).

Achu
fuente
20
Usar sudo make instally no altinstallconfigurarlo como versión predeterminada de Python
Shagun Sodhani
use CXX=g++ ./configuresi ./configure emite una advertencia diciendo que no se encontró g ++
srj
2
después de instalar como se indicó anteriormente, ¿qué comandos ejecuto en la consola para verificar que realmente esté instalado?
J86
99
Es bastante extraordinario que la mejor respuesta a la simple pregunta "cómo instalar Python" conlleve una advertencia tan terrible, es como "esta es la mejor forma en que sabemos instalar Python y podría romper su sistema" ... También es Es sorprendente que el sitio web oficial de Python tenga muchas descargas y ni una sola página de instrucciones de instalación.
patb
44
pat: la mejor respuesta a la simple pregunta "cómo instalar Python" es sudo apt-get install python, la respuesta más complicada es "cómo instalar la última Python", lo que implica "desde la fuente". Tendrá el mismo problema en cualquier sistema operativo a menos que esté instalando archivos binarios precompilados de un tercero, lo que, de nuevo, es arriesgado en cualquier sistema operativo (y varía mucho según el sistema operativo). También esta respuesta es de 2012; para obtener consejos más recientes, consulte askubuntu.com/questions/101591/…
michael
181

A menos que realmente tenga un deseo ardiente de compilarlo usted mismo, la forma preferida es utilizar el PPA DeadSnakes para instalar versiones de Python que no están incluidas de manera predeterminada:

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

Otras versiones, como python2.4o python3.6, etc. también están disponibles.

brousch
fuente
13
Nota del programa: si tiene la versión 10.04, es posible que necesite instalar python-software-properties antes de usar add-apt-repository.
Craig Maloney
3
Se recomienda construir Python en su entorno local, en lugar de instalarlo desde los binarios
precompilados
16
+1 :)really have a burning desire to compile it yourself
Watt
55
Se omitió mencionar que: 1. el ppano está respaldado oficialmente, por lo que la forma más segura es construir desde la fuente. 2. Esto resultará en un pitón global, que los que no sudopueden modificar o instalar paquetes, no uno local. 3. Se pueden instalar varias pitones localmente en diferentes ubicaciones construyendo desde la fuente.
Ioannis Filippidis
2
apt-get install python2.7Esto instala el binario python2.7 en lugar de python ... ¡feo!
Dhawal
26

Continuando documentando esto para las últimas versiones 1 de Ubuntu: para el servidor Ubuntu 16.04.1, el Python predeterminado es la versión 3.5, y Python 2.7 no está instalado por defecto. En una instalación nueva (tenga en cuenta que ni siquiera hay un pythonejecutable):

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

Nota: antes de continuar, es probable que desee hacer un rápido sudo apt-get update, sudo apt-get upgradey sudo apt-get dist-upgrade(tenga en cuenta exactamente lo que están haciendo estos comandos; estoy asumiendo una instalación nueva aquí).

Instalar python 2.7 es tan fácil como:

$ sudo apt-get install python2.7

El resultado inicial de instalar Python 2.7 es el siguiente:

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

Después de instalar 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

Pero todavía hay un problema, ya que aún no puede instalar módulos PyPI a través de pip, por ejemplo, si desea un jupyter notebook, o el último scipy o numpy (etc.), querrá instalarlos pipy luego pip installesos, y aún recurrir a apt-getpara instalar las dependencias del sistema necesarias , como graphviz o las bibliotecas del sistema central.

$ 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

Entonces, para instalar pip, nuevamente, es tan fácil como 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

Necesitará tanto python-pippara Python 2.7 pipcomo python3-pippara Python 3 pip. La instalación a través de apt-getestá segura de instalar las dependencias necesarias; Por ejemplo, aquí está la salida para instalar 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...

Como resultado de esto, sucede algo interesante: ahora tiene el "estándar" (y se recomienda PEP) python2y python3(que son solo enlaces simbólicos a python 2.7 y 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

También querrás sudo apt-get install python3-pip; Antes de instalar, tiene:

$ 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

Después de la instalación 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...

Las versiones resultantes:

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

Y una última cosa antes de que pueda comenzar a instalar todos sus módulos PyPI Python favoritos: probablemente tendrá que actualizar pip en sí (tanto pip2 como pip3, por separado; además, no importa si pipse invoca a través de los pythonejecutables o el pipejecutables, las actualizaciones reales se almacenan en /usr/lib):

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

Ahora puede ejecutar pipla versión independiente o la versión incluida en python(via python -m pip {command}).


[1] Resumen histórico: Ubuntu anterior solo tenía Python 2.6, por lo tanto, todos los diversos métodos para instalar Python 2.7+. Más tarde, después de agregar Python 2.7 a los repositorios públicos, todavía teníamos el mismo desafío para instalar el Python 2.7 más nuevo con las últimas correcciones, que era (demasiado) frecuentemente necesario. La situación actual es mucho mejor / más simple: las Python 2.7 y 3.5 actuales (básicamente las dos únicas versiones de la plataforma Python que le interesan a las personas) que ahora están en repositorios públicos son muy estables, por lo que ahora solo tenemos que preocuparnos por instalar la última versión módulos de Python , no el último Python . Así que ahora el "problema de la última versión" de Python se ha movido parcialmente fuera de los repositorios del sistema operativo apty hacia PyPI & pip).

Miguel
fuente
2
Siguiendo estas instrucciones en Ubuntu 16.04.1 LTS configuró con éxito Python 2.7 y pip así: sudo apt-get install python2.7; sudo apt-get install python-pip; sudo -H python2 -m pip install --upgrade pip; # Versión de comprobación: $ pip --version -> pip 9.0.1 de /usr/local/lib/python2.7/dist-packages (python 2.7); $ python --version -> Python 2.7.12
Robert Lujo
Disculpe mi ignorancia, pero ¿puedo saber qué significa "hash" al mostrar versiones de Python?
Falló el científico el
1
@TalhaIrfan Es una buena pregunta (y, si permite una respuesta simplificada): cuando un comando se escribe en bash (como con la mayoría de los shells), el cmd podría ser un alias, una función o un archivo ejecutable que se encuentra en el $PATH. El env var PATHes una larga lista de directorios con literalmente miles de archivos. Para acelerar la búsqueda del ejecutable, el shell utiliza una tabla hash en caché para una búsqueda rápida. Podría volverse obsoleto, por lo que "hash" le permite saber que está "recordado" este comando asignado a ese archivo ejecutable unix.stackexchange.com/questions/5609/…
michael
@michael ¡Muchas gracias! Es una respuesta realmente útil: breve e ir al grano.
Falló el científico el
1
@gaia, es posible que desee hacer una pregunta por separado, ya que es posible que se requiera más información para resolverlo (o si algo ha cambiado desde que escribí esto). Tal vez, en primer lugar verificar que tanto pip (2.7) y pip3(3.x) fueron completamente instalado / actualizado, y no sólo el ex - es decir, sudo apt-get install python-pip python3-pipy sudo -H python2 -m pip install --upgrade pip, y sudo -H python3 -m pip install --upgrade pip ... O si realmente es un problema de permisos (indicado por "funciona con sudo "), entonces será un poco más difícil de localizar.
michael
11

12.04

Si está siguiendo la respuesta de Achu , entonces el término libread5-devdebe cambiarse a libreadline-gplv2-dev. Entonces el comando completo sería:

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
Ese tipo
fuente
4

También puede descargarlo e instalarlo a través de 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
Susurrado
fuente
Esta es la forma más limpia de obtener una versión realmente actualizada de Python en una versión anterior de Ubuntu. También incluye soporte virtualenv, a través del pyenv-virtualenvcomplemento, lo que facilita la instalación de aplicaciones con diferentes requisitos de módulo sin conflictos.
RichVel
2
Dos advertencias sobre pyenv: (1) solo funciona desde un shell bash (o tal vez zsh, pero ciertamente no es un guión que es / bin / sh en Ubuntu), y (2) requiere un shell de inicio de sesión (por ejemplo bash --login), que no es siempre fácil de lograr, por ejemplo, de Ansible. Mejor para uso interactivo, menos bueno para servidores de secuencias de comandos.
RichVel
0

Principalmente un espejo de esta respuesta con una introducción ajustada

Yo recomendaría pyenv . Automatiza el proceso de compilación además de instalar las dependencias de encabezado (ver más abajo). Puede compilar e instalar una versión nueva (o antigua) de Python simplemente diciendo pyenv install 3.6.0. Todo funciona como su usuario, por lo que no tiene que preocuparse por estropear el Python utilizado por Ubuntu.

A diferencia de algunas de las opciones basadas en apt-repo (por ejemplo, deadsnakes), generalmente funcionará el mismo día de un lanzamiento después de un pyenv updateporque no es necesario esperar a que alguien más lo empaquete. Vea todas las versiones que puede instalar conpyenv install --list

Instalar pyenv

  1. Instale las herramientas y los encabezados necesarios para construir CPythons (las pitones exóticas como PyPy o Jython pueden tener otras dependencias). Pyenv usa Git, además de que también permite compilaciones / instalaciones de ramas de origen, por lo que puede instalar lo que sea 3.8 en este momento, es decir, la rama maestra de CPython recién salido de 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. Ejecute el script de instalación (instala pyenv y algunos complementos pyenv muy útiles del autor original; consulte aquí para obtener más información)

    curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  3. Agregue líneas de inicio a su ~/.profileo ~/.bashrc(lo menciona al final del script de instalación):

    export PATH="~/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
  4. Reinicie su shell (cerrar y abrir o exec $SHELL) o vuelva a cargar el script de perfil. (con p source ~/.bashrc. ej. )

¡Hecho!

Establecer un ambiente

Para no tocar el sistema Python (generalmente es una mala idea; los servicios a nivel del sistema operativo pueden depender de algunas versiones específicas de la biblioteca, etc.) hacen su propio entorno, ¡es fácil! Aún mejor, no sudo, para ello o pipinstala!

  1. Instale su versión preferida de Python (esto descargará la fuente y la compilará para su usuario, no se requiere entrada)

    pyenv install 3.6.0
  2. Conviértalo en un virtualenv para que pueda hacer otros más tarde si lo desea

    pyenv virtualenv 3.6.0 general
  3. Hazlo globalmente activo (para tu usuario)

    pyenv global general
  4. Haz lo que quieras con Python / pip, etc. Es tuyo.

Si desea limpiar sus bibliotecas más tarde, puede eliminar virtualenv ( pyenv uninstall general) o crear una nueva ( pyenv virtualenv 3.6.0 other_proj). También puede tener entornos activos por directorio: pyenv local other_projcolocará un .python-versionarchivo en su carpeta actual y cada vez que invoque Python o las utilidades de Python instaladas por pip desde él o debajo de él, pyenv los calzará.

Solución de problemas

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

    1. Verifique su $PATH, debe haber una entrada que termine en algo así .pyenv/bin. Si falta, asegúrese de seguir # 3 Y # 4 (reinicie su shell) en Instalar pyenv arriba.
  • pyenv: no such command 'virtualenv'

    1. Si no usó el script de instalación, es probable que solo haya instalado el paquete raíz pyenv. Consulte pyenv-virtualenv para obtener instrucciones sobre cómo agregar el complemento.
    2. Si usó el script de instalación, verifique si aparece con pyenv commands.
Nick T
fuente