Jak zainstalować Python 3.3?

103

Pobrałem Python 3.3 z oficjalnej strony, ale nie mam pojęcia, jak go zainstalować.

Używam Ubuntu 12.04

zaszaleć
źródło
Dlaczego nie mogę aktualizować aplikacji bez aktualizacji całego systemu operacyjnego? wyjaśnia, dlaczego nie jest dostępny. W skrócie: inne pakiety korzystają ze starszej (wciąż utrzymywanej!) Wersji. Zachowaj swoje osobiste przemyślenia na temat tego, jak ta strona działa dla siebie lub opublikuj ją w meta, gdzie możesz opublikować, gdy zdobędziesz wystarczającą liczbę punktów reputacji . Ale najpierw: FAQ na temat działania witryny.
gertvdijk

Odpowiedzi:

113

Python 3.3 został wydany 29 września 2012 r., Kilka miesięcy po wydaniu Ubuntu 12.04. Jest on zawarty w Ubuntu 12.10, ale jako python3.3pakiet

Jeśli chcesz zainstalować Python 3.3 na wersji Ubuntu, która nie ma go w swoich repozytoriach, masz następujące opcje:

Użyj PPA

Istnieje umowa PPA zawierająca starą i nową wersję Pythona, którą prowadzi Felix Krull. Zobacz odpowiedź Luper Rouch za instrukcją instalacji.

Skompiluj Python ze źródła

Jest to bardzo łatwe i pozwala na posiadanie wielu wersji Pythona bez bałaganu przy pomocy interpretera języka Python (używanego przez wiele własnych programów Ubuntu). Na mojej maszynie deweloperskiej mam dosłownie dziesiątki różnych wersji Pythona od 2.4 do 3.2 żyjących szczęśliwie /opt.

potrzebujemy kompilatora C i innych rzeczy do skompilowania Pythona

sudo apt-get install build-essential

Biblioteki SQLite muszą być zainstalowane, aby Python mógł obsługiwać SQLite.

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

Pobierz i skompiluj 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

Kilka miłych akcentów, aby zainstalować pypolecenie, tworząc dowiązanie symboliczne:

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

Możesz też zainstalować alias bash o nazwie py:

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

I to jest to. Teraz możesz mieć dowolną wersję Pythona, nawet alfa, lub, powiedzmy, mieć kilka kopii Pythona 3.3 skompilowanych z różnymi ustawieniami ... ale nie tak wiele osób tego potrzebuje :)

Użyj pyenv

Istnieje oprogramowanie o nazwie pyenv, które może pomóc w zautomatyzowaniu procedury - w zasadzie kompiluje Pythona ze źródła, instalując go w katalogu domowym. Jego celem jest pomoc w zarządzaniu wieloma wersjami Pythona.

Siergiej
źródło
1
Po instalacji, jak korzystać z tej alternatywnej instalacji Pythona? Załóżmy, że mam kilka .pyplików z #!/usr/bin/env pythonlinią shebang (zestaw bitów wykonywalnych). Jak sprawić, by korzystały z tej instalacji /opt/python3.3bez modyfikowania wszystkich? A nawet te zainstalowane przez system.
gertvdijk
1
@gertvdijk: nie chodzi o zastąpienie domyślnego interpretera - jeśli to zrobisz, wówczas każda aplikacja python uruchamiana z twojego konta będzie używać Python 3.3, w tym aplikacji Ubuntu, takich jak Software Center ect. Nie chcemy tego. Aby uruchomić skrypt, po prostu użyj py myscript.py(gdzie pyjest dowiązanie symboliczne, które utworzyliśmy na końcu ćwiczenia). Zwykle używam również virtualenv lub buildout do swoich projektów.
Sergey
1
@gertvdijk Za pomocą virtualenv można zarządzać wieloma środowiskami Python.
flup
@gertvdijk Czy wiesz, że Python 3.x i Python 2.x są niezgodne? Gdybyś skierował wszystkie istniejące skrypty na Python 3.3, prawdopodobnie by się zepsuły. Po prostu wytnij nowe skrypty pythonowe jako #! /opt/python3.3 i poprawny interpreter zostanie skierowany po uruchomieniu.
Tony Martin
1
mkdir ~/bin ln -s /opt/python3.3/bin/python ~/bin/pynie działa dla mnie Stwierdziłem, że tak /opt/python3.3/bin/pythonpowinno być /opt/python3.3/bin/python3, ale wciąż się rozwija py: command not found. Jakieś sugestie.
43

Oto, co zrobiłem, aby zainstalować Python 3.3 na Ubuntu 12.04:

  1. Zainstaluj zależności:

    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. Pobierz Python 3.3.0:

    wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz
  3. Wyciąg:

    tar xvfz Python-3.3.0.tgz
  4. Skonfiguruj i zainstaluj:

    cd Python-3.3.0
    ./configure --prefix=/opt/python3.3
    make  
    sudo make install
    
  5. Sprawdź, czy zadziałało:

    /opt/python3.3/bin/python3

Powinieneś zobaczyć coś podobnego:

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

Kilka dodatkowych przydatnych rzeczy ... możesz stworzyć wirtualne środowisko w swoim domu i po prostu aktywować Python 3.3 na żądanie.

  1. Utwórz wirtualne środowisko w domu:

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

    source ~/py33/bin/activate
  3. Zainstaluj narzędzia dystrybucji:

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

    easy_install pip
  5. Zainstaluj dowolne pakiety Pythona (np. Butelka)

    pip install bottle

Cieszyć się!

Boolean
źródło
sudo apt-get build-dep python3.2? Prawdopodobnie zapomniałeś installpomiędzy :)
Stam Kaly
1
@StamKaly: nope. build-depnie jest pakietem, to apt-get czasownik (jak install). Oznacza to: „ zainstaluj wszystkie pakiety niezbędne do zbudowania żądanych pakietów źródłowych
MestreLion,
35

W deadsnakes PPA ma pakiety dla starych i nowych wersji Pythona:

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
źródło
Tak, to zainstalowało coś w porządku, ale jak mam to przywołać? Wpisanie „python” daje methe interpretera Pythona 2, a wpisanie „python3” sugeruje, że nie jest on zainstalowany i można go zainstalować z repozytoriów ubuntu.
Kris,
Ach .. Widzę, że plik wykonywalny nazywa się python3.3 (lub pythonX.Y, dla dowolnej zainstalowanej wersji python :-)
kris
ppa: fkrull / deadsnakes jest archiwizowany. Zamiast tego użyj ppa: deadsnakes / ppa.
codefool
10

Ubuntu 14.04 i wcześniejsze:

Python2.7 jest domyślnie dostępny. Użyj menedżera pakietów, aby zainstalować Python3 na zwykłym pythonie w Ubuntu, Ubuntu może obsługiwać zarówno wersje 2.7, jak i 3.2 w tym samym czasie bez wirtualnej wersji:

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

Ubuntu 18.04:

Python3 jest dostarczany domyślnie z systemem operacyjnym, a Python2.7 nie jest dostępny, chyba że zostanie specjalnie zainstalowany.

Trzy nazwach pakietów do wyboru: python, python-minimal, python-all. Domyślnie jest minimalne. Te słowa to tylko flagi repozytoriów Ubuntu, które zawierają dodatkowe elementy lub nie. Aby zobaczyć, jakie dokładnie są i nie są zawarte w paczkach, zapoznaj się z podgrupami: https://packages.ubuntu.com/bionic/python

sudo apt install python-minimal
python --version

Lub spróbować zaktualizować Python3:

sudo apt install python3-minimal
python --version

Aby spróbować wymusić określoną wersję, możesz przekazać parametr wersji:

sudo apt-get install python 3.3.3
Eric Leschinski
źródło
1
Jak zaktualizować wersję Python3 z 3.2.3 do 3.3.5?
anon58192932
2
Python 3.3 jest dostępny tylko z domyślnych repozytoriów w Ubuntu 12.10 i nowszych. OP używa 12.04
Lenna
Jeśli chcesz, aby więcej niż 2 wersje Pythona były dostępne na jednym komputerze (innym niż domyślne wersje 2.7 i 3.2 wybrane dla twojego systemu operacyjnego), każda nowa wersja Pythona powinna znajdować się we własnym środowisku wirtualnym ( virtualenv). Wyszukiwarka Google: „Użyj virtualenv do izolacji wersji Pythona”. Jeśli nie używasz jakiegoś kontenera, narażasz się na labirynt problemów, ponieważ python bierze gigantyczne gówno na cały komputer, zajmując każdy zakamarek i walcząc ze sobą, i walczą ze sobą w stylu Johna Cleeseiana.
Eric Leschinski,
1

Napisałem skrypt automatyzujący pobieranie, kompilowanie i instalowanie nie-pakietowych wersji Pythona. Skrypt instaluje wersję Pythona /optbezpiecznie z dala od menedżera pakietów i systemowych wersji Pythona.

Pobiera nawet zależności dla większości wersji Ubuntu. Powinien działać na wszystkich obecnie obsługiwanych wersjach Ubuntu (10.04, 12.04, 12.10 i 13.04) i prawdopodobnie na innych wersjach.

Załączam go poniżej i opublikowałem go również w moim repozytorium Github , które jest główną lokalizacją.

Skrypt powinien zostać skopiowany i zapisany w edytorze tekstowym, na przykład, build_pythoni powinien być wykonywalny ( chmod u+x build_python), a następnie można go uruchomić z dwoma parametrami, przy czym pierwszym parametrem musi być zawsze gałąź Python, a drugim parametrem zawsze musi być Wersja Python.

Zobacz python.org, aby uzyskać listę wersji, którą chcesz skompilować.

Oto kilka przykładów użycia skryptu:

  1. W wersji stabilnej po sprawdzeniu list można uruchomić ją jako

    ./build_python '3.3.2' '3.3.2'
  2. W wersji rozwojowej, w której dwa parametry są różne na listach, można uruchomić jako:

    ./build_python '3.4.0' '3.4.0a1'

Treść skryptu została odtworzona poniżej (bez podświetlania składni tutaj. W tym celu zobacz moją stronę 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}

źródło
1

Ostrzeżenie : Pythonbrew został wycofany na korzyść pyenv. Zaktualizowane instrukcje są tutaj

Możesz także użyć czegoś takiego jak pythonbrew :

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

Jest dość łatwy w użyciu, a kolejną zaletą jest to, że można zainstalować dowolną potrzebną wersję Pythona. Szczegółowe informacje na temat trybu znajdują się w ich dokumentach

Aleksiej Savanowicz
źródło
0

Oto kroki, które wykonałem:

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
źródło