¿Cómo instalo Python 3.3?

103

He descargado Python 3.3 del sitio oficial pero no tengo idea de cómo instalarlo.

Estoy usando Ubuntu 12.04

Se puso salvaje
fuente
¿Por qué no puedo actualizar las aplicaciones sin actualizar todo el sistema operativo? explica por qué no está disponible. En resumen: otros paquetes dependen de una versión anterior (¡aún mantenida!). Y mantenga sus pensamientos personales sobre cómo funciona este sitio para usted o publíquelo en meta donde puede publicar una vez que haya ganado suficientes puntos de reputación . Pero primero: Preguntas frecuentes sobre cómo funciona el sitio.
gertvdijk

Respuestas:

113

Python 3.3 se lanzó el 29 de septiembre de 2012, varios meses después del lanzamiento de Ubuntu 12.04. Está incluido en Ubuntu 12.10 aunque como python3.3paquete

Si desea instalar Python 3.3 en la versión de Ubuntu que no lo tiene en sus repositorios, tiene las siguientes opciones:

Use un PPA

Hay un PPA que contiene versiones antiguas y nuevas de Python mantenidas por Felix Krull. Consulte la respuesta de Luper Rouch para obtener instrucciones de instalación.

Compilar Python desde la fuente

Esto es muy fácil y le permite tener múltiples versiones de Python sin meterse con el intérprete de Python del sistema (que es utilizado por muchos programas propios de Ubuntu). En mi máquina de desarrollo, tengo literalmente docenas de diferentes versiones de Python de 2.4 a 3.2 viviendo felices /opt.

necesitamos compilador de C y otras cosas para compilar Python

sudo apt-get install build-essential

Las bibliotecas de SQLite deben instalarse para que Python tenga soporte para SQLite.

sudo apt-get install libsqlite3-dev
sudo apt-get install sqlite3 # for the command-line client
sudo apt-get install bzip2 libbz2-dev

Descargue y compile Python:

wget http://www.python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
tar xJf ./Python-3.3.5.tar.xz
cd ./Python-3.3.5
./configure --prefix=/opt/python3.3
make && sudo make install

Algunos buenos detalles para instalar un pycomando creando un enlace simbólico:

mkdir ~/bin
ln -s /opt/python3.3/bin/python3.3 ~/bin/py

Alternativamente, puede instalar un alias bash llamado pyen su lugar:

echo 'alias py="/opt/python3.3/bin/python3.3"' >> .bashrc

Y ya está. Ahora puede tener cualquier versión de Python, incluso una alfa, o, por ejemplo, tener algunas copias de Python 3.3 compiladas con diferentes configuraciones ... aunque no mucha gente lo necesita :)

Utilizar pyenv

Hay un software llamado pyenv que puede ayudarlo a automatizar el procedimiento; lo que esencialmente hace es compilar Python desde la fuente, instalándolo en su directorio de inicio. Su objetivo es ayudarlo a administrar múltiples versiones de Python.

Sergey
fuente
1
Después de la instalación, ¿cómo usaría esta instalación alternativa de Python? Supongamos que tengo algunos .pyarchivos con la #!/usr/bin/env pythonlínea shebang (conjunto de bits ejecutable), ¿cómo los haría usar esta instalación /opt/python3.3sin modificarlos todos? O incluso los instalados en el sistema.
gertvdijk
1
@gertvdijk: el objetivo no es reemplazar el intérprete predeterminado; si lo hace, todas las aplicaciones de Python que se ejecuten desde su cuenta utilizarán Python 3.3, incluidas las aplicaciones de Ubuntu, como Software Center ect. No queremos eso. Para ejecutar un script, solo use py myscript.py(donde pyes un enlace simbólico que hemos creado al final del ejercicio). Normalmente también uso virtualenv o buildout para mis proyectos.
Sergey
1
@gertvdijk Puede mantener manejables múltiples entornos de Python usando virtualenv.
flup
@gertvdijk ¿Eres consciente de que python 3.xy python 2.x son incompatibles? Si tuviera que apuntar todos sus scripts existentes a Python 3.3, probablemente se romperían. Simplemente cambie sus nuevos scripts de Python como #! /opt/python3.3 y el intérprete correcto se abordará cuando lo ejecutes.
Tony Martin
1
mkdir ~/bin ln -s /opt/python3.3/bin/python ~/bin/pyno funciona para mi Descubrí que /opt/python3.3/bin/pythondebería ser /opt/python3.3/bin/python3, pero aún así py: command not found. Alguna sugerencia.
43

Esto es lo que hice para instalar Python 3.3 en Ubuntu 12.04:

  1. Instalar dependencias:

    sudo apt-get build-dep python3.2
    sudo apt-get install libreadline-dev libncurses5-dev libssl1.0.0 tk8.5-dev zlib1g-dev liblzma-dev
  2. Descargar Python 3.3.0:

    wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz
  3. Extraer:

    tar xvfz Python-3.3.0.tgz
  4. Configurar e instalar:

    cd Python-3.3.0
    ./configure --prefix=/opt/python3.3
    make  
    sudo make install
  5. Prueba si funcionó:

    /opt/python3.3/bin/python3

Deberías ver algo similar:

Python 3.3.0 (default, Jan 31 2013, 18:37:42) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Algunas cosas adicionales que son útiles ... puede crear un entorno virtual en su hogar y simplemente activar Python 3.3 a pedido.

  1. Cree un entorno virtual en su hogar:

    /opt/python3.3/bin/pyvenv ~/py33
  2. Activa el virtualenv:

    source ~/py33/bin/activate
  3. Instalar herramientas de distribución:

    wget http://python-distribute.org/distribute_setup.py
    python distribute_setup.py
  4. Instalar pip:

    easy_install pip
  5. Instale los paquetes de Python que desee (es decir, botella)

    pip install bottle

¡Disfrutar!

Booleano
fuente
sudo apt-get build-dep python3.2? Probablemente te olvidaste installen el medio :)
Stam Kaly
1
@StamKaly: no. build-depno es un paquete, es un apt-get verbo (like install). Significa " instalar todos los paquetes necesarios para construir los paquetes fuente solicitados "
MestreLion
35

Los deadsnakes PPA tiene paquetes para las versiones antiguas y nuevas de Python:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.3
Luper Rouch
fuente
Sí, eso instaló algo bien, pero ¿cómo lo invoco? Escribir 'python' le da al intérprete methe python 2 y escribir 'python3' sugiere que no está instalado y se puede instalar desde repositorios de ubuntu.
kris
Ah ... veo que el ejecutable se llama python3.3 (o pythonX.Y, para cualquier versión de python instalada :-)
kris
ppa: fkrull / deadsnakes está archivado. Use ppa: deadsnakes / ppa en su lugar.
codefool
10

Ubuntu 14.04 y versiones anteriores:

Python2.7 viene por defecto, use el administrador de paquetes para instalar python3 sobre Python normal en Ubuntu, Ubuntu puede manejar 2.7 y 3.2 al mismo tiempo sin un virtualenv:

sudo apt-get install python3
python3 --version
Python 3.2.3
python --version
Python 2.2.3

Ubuntu 18.04:

Python3 viene por defecto con el sistema operativo y Python2.7 no está disponible a menos que lo instale específicamente.

Tres nombres de paquetes para elegir: python, python-minimal, python-all. El valor predeterminado es mínimo. Estas palabras son solo banderas de los repositorios de Ubuntu para incluir cosas adicionales o no. Para ver exactamente qué subpaquetes son y no están incluidos, profundice en los subpaquetes de: https://packages.ubuntu.com/bionic/python

sudo apt install python-minimal
python --version

O para intentar actualizar el python3:

sudo apt install python3-minimal
python --version

Para intentar forzar una versión específica, puede intentar pasar un parámetro de versión:

sudo apt-get install python 3.3.3
Eric Leschinski
fuente
1
¿Cómo se actualiza la versión de python3 de 3.2.3 a 3.3.5?
anon58192932
2
Python 3.3 solo está disponible desde los repositorios predeterminados en Ubuntu 12.10 y versiones posteriores. OP utiliza 12.04
Lenna
Si desea tener más de 2 versiones de python disponibles en una computadora (que no sean las 2.7 y 3.2 predeterminadas que su sistema operativo elija para usted), entonces cada nueva versión de python debe estar en su propio entorno virtual ( virtualenv). Búsqueda de Google: "Use virtualenv para aislar la versión de python". Si no usas algún tipo de contenedor, entonces te expones a un laberinto de problemas, ya que Python tiene una mierda gigante en tu computadora, ocupa cada rincón y grieta, y se pelean entre ellos al estilo de John Cleeseian.
Eric Leschinski
1

He escrito un script para automatizar todas las descargas, compilaciones e instalaciones de versiones de Python que no son paquetes. El script instala la versión de Python de /optforma segura lejos del administrador de paquetes y las versiones del sistema de Python.

Incluso obtiene las dependencias también para la mayoría de las versiones de Ubuntu. Debería funcionar en todas las versiones de Ubuntu actualmente compatibles (10.04, 12.04, 12.10 y 13.04), y probablemente en otras versiones.

Lo incluyo a continuación y lo publiqué también en mi repositorio de Github , que es la ubicación maestra.

El script debe copiarse y guardarse en un editor de texto como, por ejemplo, build_pythony ejecutarse ( chmod u+x build_python) y luego puede ejecutarse con dos parámetros, donde el primer parámetro siempre debe ser la rama de Python, y el segundo parámetro siempre debe ser el Versión de Python

Consulte python.org para ver los listados de la versión que desea compilar.

Aquí hay un par de ejemplos del uso del script:

  1. Para la versión estable, después de haber verificado los listados, se puede ejecutar como

    ./build_python '3.3.2' '3.3.2'
  2. Para la versión de desarrollo, donde los dos parámetros son diferentes en los listados, se puede ejecutar como:

    ./build_python '3.4.0' '3.4.0a1'

El cuerpo del script se reproduce a continuación (sin resaltar la sintaxis aquí. Para eso, vea mi página de Github :

#!/usr/bin/env bash

# by mik, aka Exactus29, https://github.com/Exactus29
# 
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

##########

# a script to compile the latest stable version of Python and place in /opt

(( $# == 2 )) || { printf "Please provide a version branch (e.g. 3.4.0) and a version release (e.g. 3.4.0a1) in that order.\n"
                   printf "The official site is python.org, see the ftp server at: http://python.org/ftp/python.\n" >&2 ; exit 1; }

# a splew of variables, so that just the version number can be given on the cmd line
# and then then the script can do the rest, including verifying the packages using gpg

# need different branch and version as sometimes the two are different, particularly for dev releases
py_branch="$1"
py_version="$2"
shift 2

# check if install target already exists in /opt, and exit so user can decide what to do
if [[ -d /opt/python-${py_version} ]]; then 
    printf "Target directory for the build already exists, please rename or remove.\n" >&2
    exit 1
else 
    :
fi

# use tar.bz2 as that is what most of the older releases used, i.e. in case user tries to build an older release
py_url="http://python.org/ftp/python/${py_branch}/Python-${py_version}.tar.bz2"
py_asc="http://python.org/ftp/python/${py_branch}/Python-${py_version}.tar.bz2.asc"
py_dir="$HOME/src/python_build" # checked to exist later, etc

# first check if user requested file exists on server
wget --spider ${py_url} >/dev/null 2>&1
(( $? > 0 )) && printf "No such version, version ${py_version} does not exist\n" >&2 && exit 1


# now very important before we do anything else, to check if asc file exists, as it  doesn't for some downloads
# if we don't check and it doesn't exist it causes the script to exit

wget --spider ${py_asc} >/dev/null 2>&1
# set a flag re whether asc file exists, so can check later and avoid problems
(( $? > 0 )) && no_asc=1 || no_asc=0

# set up more variables
py_tarbz2="${py_url##*/}"
(( no_asc == 0 )) && py_tarbz2_asc="${py_asc##*/}" # only set this if there is an asc file
py_folder="${py_tarbz2%.*.*}"
py_gpg_key="" 

# check other build dependencies are installed, beyond build-dep, sqlite support, readline, ncurses, build-essential 
dependencies_check() {

    local installed=()
    local to_be_installed=()
    local dependencies_list=(build-essential wget libreadline-dev libncurses5-dev libssl1.0.0 tk8.5-dev zlib1g-dev liblzma-dev
libsqlite3-dev sqlite3 bzip2 libbz2-dev)    

    for package in "${dependencies_list[@]}"; do 
        if grep -iq '^ii' < <(dpkg -l "$package"); then
            installed+=("$package")
        else 
            to_be_installed+=("$package")
        fi
    done 2>/dev/null

    if (( ${#to_be_installed[@]} > 0 )); then
        printf "If you have recently elevated your privileges with sudo, you will not see a " 
        printf "prompt here, before the apt-get update and install of packages occurs.\n" 
        sleep 2
        sudo -p "We need to install some dependencies, please enter your password: " apt-get update && sudo apt-get -y install "${to_be_installed[@]}"
        return 0
    else 
        printf "\nNothing to install, proceeding.\n"
        return 0
    fi

}

# tailor build-dep to new python version we want to build, basically either 2x or 3x versions
# should work with at least lucid/precise/quantal/raring/saucy, the currently supported versions
if (( ${py_branch:0:1} == 3 )) && grep -iq 'precise' /etc/lsb-release 2>/dev/null; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python3.2 && dependencies_check
elif (( ${py_branch:0:1} == 3 )) && grep -Eiq '(raring|quantal|saucy)' /etc/lsb-release 2>/dev/null; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python3.3 && dependencies_check
elif [[ ${py_branch:0:3} == 2.7 ]] && grep -iq 'lucid' /etc/lsb-release 2>/dev/null; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python2.6 && dependencies_check
elif [[ ${py_branch:0:3} == 2.7 ]]; then
    sudo -p "Please provide your password to install dependencies: " apt-get build-dep python2.7 && dependencies_check
else
    printf "\nProceeding, but make sure you have the correct build deps installed.\n\n"
    sleep 2        
fi

# dir checks
if [[ -d $HOME/src ]]; then 
    cd $HOME/src || exit 1
else
    mkdir $HOME/src && cd $HOME/src
fi

if [[ -d ${py_dir} ]]; then
    mv "${py_dir}" "${py_dir}_old_$(date '+%F_%H_%M_%S')"
    mkdir "${py_dir##*/}" && cd "${py_dir##*/}"
else
    mkdir "${py_dir##*/}" && cd "${py_dir##*/}"
fi

# finally, download python 
printf "\nNow downloading version ${py_version} from branch ${py_branch} ....."
wget "${py_url}" -P "${py_dir}" >/dev/null 2>&1
(( $? == 0 )) && printf "Done.\n"
# only download asc if it exists, set flag earlier
(( no_asc == 0 )) && wget "${py_asc}" -P "${py_dir}" >/dev/null 2>&1

# gpg tests

gpg_test() {
    # if error returned, extract gpg key from error message
    py_gpg_key="$(gpg --verify "${py_tarbz2_asc}" "${py_tarbz2}" 2>&1 | awk '{ print $NF }' | grep -v found)"

    # now check with gpg_key (should be Python release signing key)
    printf "\nReceiving keys.. "
    gpg --recv-keys "${py_gpg_key}" >/dev/null 2>&1
    (( $? > 0)) && printf "Key could not be received\n" || printf "Done.\n"

    printf "\nVerifying download... "
    gpg --verify "${py_tarbz2_asc}" "${py_tarbz2}" >/dev/null 2>&1
    (( $? > 0 )) && printf "The download could not be verified.\n" || printf "Done.\n"

}

if (( no_asc == 0 )); then
    gpg --verify "${py_tarbz2_asc}" "${py_tarbz2}" >/dev/null 2>&1
    if (( $? > 0 )); then 
        gpg_test 
    else
        printf "\nDownload verified\n\n"
    fi
else
    printf "\nProceeding even though asc file is not available for gpg to verify download\n\n"
    sleep 1
fi

# unpack and cd to the python folder
printf "Unpacking archive...."
tar xvjf "${py_folder}.tar.bz2" >/dev/null 2>&1
(( $? == 0 )) && printf "Done.\n" || { printf "Problems occured when unpacking, exiting\n" >&2; exit 1; }
cd "${py_folder}" || exit 1

# tailor the build to your machine here with configure and make

printf "\nNow for the configure (default prefix is /opt/python-${py_version})...."
sleep 2
./configure --prefix=/opt/python-${py_version} >/dev/null 2>&1
# as configure and make will exit anyway on error, no need to add || alternatives to the tests below
(( $? == 0 )) && printf "Done.\n\n"  
sleep 1

printf "\nNow for the compile. (If necessary, please add your own specifications to the make command line and run the script again)\n"
printf "\nPlease wait for the compile to finish: it may take a while...."
make >/dev/null 2>&1
(( $? == 0 )) && printf "Done.\n\n"

printf "\nWe are installing with make install into /opt, instead of using checkinstall.\n"
sudo make install >/dev/null 2>&1
installcode=$?
(( $installcode == 0 )) && printf "\n${py_version} succesfully installed in /opt/python-${py_version}\n\n"

if [[ -d $HOME/bin ]]; then
    ln -s /opt/python-${py_version}/bin/python${py_version:0:3} ~/bin/py-${py_version}
    (( $? == 0 )) && printf "\nSymlink created, run py-${py_version} in the terminal to launch the interpreter\n"
else
    mkdir $HOME/bin && ln -s /opt/python-${py_version}/bin/python${py_version:0:3} ~/bin/py-${py_version}
    (( $? == 0 )) && printf "\nSymlink created, run py-${py_version} in the terminal to launch the interpreter\n"
    printf "\nHowever, you will not be able to call py-${py_version} until you have logged out and in again, as bin will not"
    printf " have been added to your path just as $HOME/bin is created.\nn"
fi

# important info re setting up pyvenv re distribute tools and pip etc
cat <<extra_info

            See also a program called pyvenv with your installation in /opt, 
            with which you can create a virtual environment and use tools
            such as pip, etc. See the official documentation at:
            http://docs.python.org/3.3/using/scripts.html#pyvenv-creating-virtual-environments

extra_info

sleep 2 
exit ${installcode}

fuente
1

Advertencia : Pythonbrew ha quedado en desuso a favor de pyenv. Las instrucciones actualizadas están aquí

También puedes usar algo como pythonbrew :

curl -kL http://xrl.us/pythonbrewinstall | bash    
echo "[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc" >> ~/.bashrc    
pythonbrew install 3.3

Es bastante fácil de usar y otro beneficio es que es posible instalar cualquier versión de Python que necesite. Por favor vea sus documentos para detalles del modo

Alexey Savanovich
fuente
0

Aquí están los pasos que seguí:

wget http://python.org/ftp/python/3.3.2/Python-3.3.2.tar.bz2
tar -xvjf ./Python-3.3.2.tar.bz2
cd ./Python-3.3.2
./configure --prefix=/opt/python3.3
make && make install
mkdir ~/bin
ln -s /opt/python3.3/bin/python ~/bin/py
echo 'alias py="/opt/python3.3/bin/python3"' >> .bashrc
Tarun
fuente