Bagaimana cara menginstal Python 3.3?

103

Saya telah mengunduh Python 3.3 dari situs resmi tetapi tidak tahu cara menginstalnya.

Saya menggunakan Ubuntu 12.04

gonewild
sumber
Mengapa saya tidak dapat memperbarui aplikasi tanpa memutakhirkan seluruh OS? menjelaskan mengapa itu tidak tersedia. Singkatnya: paket-paket lain mengandalkan versi yang lebih lama (masih dipertahankan!). Dan tolong simpan pikiran pribadi Anda tentang bagaimana situs ini bekerja untuk Anda sendiri atau posting di meta di mana Anda dapat memposting setelah Anda mendapatkan poin reputasi yang cukup . Tapi pertama-tama: FAQ tentang cara kerja situs.
gertvdijk

Jawaban:

113

Python 3.3 telah dirilis pada 29 September 2012, beberapa bulan setelah Ubuntu 12.04 dirilis. Ini termasuk dalam Ubuntu 12.10 sebagai python3.3paket

Jika Anda ingin menginstal Python 3.3 pada versi Ubuntu yang tidak memilikinya di repositori, Anda memiliki opsi berikut:

Gunakan PPA

Ada PPA yang berisi versi Python Lama dan Baru yang dikelola oleh Felix Krull. Lihat jawaban Luper Rouch untuk petunjuk pemasangan.

Kompilasi Python dari sumber

Ini sangat mudah dan memungkinkan Anda memiliki beberapa versi Python tanpa mengacaukan interpreter sistem python (yang digunakan oleh banyak program Ubuntu sendiri). Di mesin dev saya, saya memiliki lusinan versi Python yang berbeda dari 2,4 hingga 3,2 yang hidup bahagia /opt.

kita membutuhkan kompiler C dan hal-hal lain untuk mengkompilasi Python

sudo apt-get install build-essential

Libite SQLite perlu diinstal agar Python memiliki dukungan SQLite.

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

Unduh dan kompilasi 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

Beberapa sentuhan yang bagus untuk menginstal pyperintah dengan membuat symlink:

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

Atau, Anda dapat menginstal alias bash sebagai pygantinya:

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

Dan ini dia. Sekarang Anda dapat memiliki setiap versi Python, bahkan alpha, atau, katakanlah, untuk memiliki beberapa salinan Python 3,3 disusun dengan pengaturan yang berbeda ... tidak banyak orang membutuhkan meskipun :)

Gunakan pyenv

Ada perangkat lunak bernama pyenv yang dapat membantu Anda mengotomatiskan prosedur - yang dasarnya adalah mengkompilasi Python dari sumber, menginstalnya di direktori home Anda. Tujuannya adalah untuk membantu Anda mengelola beberapa versi Python.

Sergey
sumber
1
Setelah instalasi, bagaimana cara menggunakan instalasi Python alternatif ini? Katakanlah saya memiliki beberapa .pyfile dengan #!/usr/bin/env pythongaris shebang (bit set yang dapat dieksekusi), bagaimana saya membuat mereka menggunakan instalasi ini /opt/python3.3tanpa mengubah semuanya? Atau bahkan yang diinstal sistem.
gertvdijk
1
@gertvdijk: intinya bukan untuk menggantikan penerjemah default - jika Anda melakukannya, maka setiap aplikasi python yang dijalankan dari akun Anda akan menggunakan Python 3.3, termasuk aplikasi Ubuntu, seperti Software Center dll. Kami tidak menginginkan itu. Untuk menjalankan skrip, cukup gunakan py myscript.py(di mana pysymlink kami buat di akhir latihan). Saya juga biasanya menggunakan virtualenv atau buildout untuk proyek saya.
Sergey
1
@ gertvdijk Anda dapat menjaga beberapa lingkungan python dapat dikelola menggunakan virtualenv.
flup
@ gertvdijk Tahukah Anda bahwa python 3.x dan python 2.x tidak kompatibel? Jika Anda menunjukkan semua skrip yang ada di python 3.3, mereka mungkin akan rusak. Cukup shebang skrip python baru Anda sebagai #! /opt/python3.3 dan interpreter yang benar akan dialamatkan ketika Anda menjalankannya.
Tony Martin
1
mkdir ~/bin ln -s /opt/python3.3/bin/python ~/bin/pytidak bekerja untuk saya. Saya menemukan itu /opt/python3.3/bin/pythonharus /opt/python3.3/bin/python3, tetapi masih mendapatkan py: command not found. Ada saran.
43

Inilah yang saya lakukan untuk menginstal Python 3.3 di Ubuntu 12.04:

  1. Instal dependensi:

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

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

    tar xvfz Python-3.3.0.tgz
  4. Konfigurasikan dan Instal:

    cd Python-3.3.0
    ./configure --prefix=/opt/python3.3
    make  
    sudo make install
    
  5. Tes jika berhasil:

    /opt/python3.3/bin/python3

Anda harus melihat sesuatu yang serupa:

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

Beberapa hal tambahan yang berguna ... Anda dapat membuat lingkungan virtual di rumah Anda dan cukup mengaktifkan Python 3.3 sesuai permintaan ..

  1. Buat Lingkungan Virtual di rumah Anda:

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

    source ~/py33/bin/activate
  3. Instal alat distribusi:

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

    easy_install pip
  5. Instal paket python yang Anda inginkan (yaitu botol)

    pip install bottle

Nikmati!

Boolean
sumber
sudo apt-get build-dep python3.2? Anda mungkin lupa installdi antara :)
Stam Kaly
1
@StamKaly: nggak. build-depbukan paket, ini apt-get kata kerja (seperti install). Ini berarti " instal semua paket yang diperlukan untuk membangun paket sumber yang diminta "
MestreLion
35

The deadsnakes PPA memiliki paket untuk versi python lama dan baru:

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
sumber
Ya, itu menginstal sesuatu dengan baik, tetapi bagaimana saya memintanya? Mengetik 'python' memberikan methe python 2 interpreter dan mengetik 'python3' menunjukkan bahwa itu tidak diinstal dan dapat diinstal dari repo ubuntu.
Keris
Ah..Aku lihat executablenya disebut python3.3 (atau pythonX.Y, untuk versi python apa pun yang diinstal :-)
kris
ppa: fkrull / deadsnakes diarsipkan. Gunakan ppa: deadsnakes / ppa sebagai gantinya.
codefool
10

Ubuntu 14.04 dan sebelumnya:

Python2.7 datang secara default, Gunakan manajer paket untuk menginstal python3 di atas python biasa di Ubuntu, Ubuntu dapat menangani kedua 2.7 dan 3.2 pada saat yang sama tanpa virtualenv:

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

Ubuntu 18.04:

Python3 datang secara default dengan OS dan Python2.7 tidak tersedia kecuali Anda menginstal secara khusus.

Tiga nama paket untuk memilih dari: python, python-minimal, python-all. Defaultnya minimal. Kata-kata ini hanya ditandai ke repositori Ubuntu untuk memasukkan hal-hal tambahan atau tidak. Untuk melihat persis apa subpackages itu dan apa yang tidak termasuk, telusuri subpackages dari: https://packages.ubuntu.com/bionic/python

sudo apt install python-minimal
python --version

Atau untuk mencoba memutakhirkan python3:

sudo apt install python3-minimal
python --version

Untuk mencoba memaksa versi tertentu, Anda dapat mencoba melewati parameter versi:

sudo apt-get install python 3.3.3
Eric Leschinski
sumber
1
Bagaimana Anda memperbarui versi python3 dari 3.2.3 ke 3.3.5?
anon58192932
2
Python 3.3 hanya tersedia dari repositori default di Ubuntu 12.10 dan yang lebih baru. OP menggunakan 12,04
Lenna
Jika Anda ingin lebih dari 2 versi python tersedia di satu komputer (selain dari standar 2.7 dan 3.2 yang OS Anda pilih untuk Anda), maka setiap versi python baru harus berada dalam lingkungan virtualnya sendiri ( virtualenv). Pencarian Google: "Gunakan virtualenv untuk mengisolasi versi python". Jika Anda tidak menggunakan semacam wadah, maka Anda mengekspos diri Anda ke labirin masalah karena python mengambil omong kosong besar di seluruh komputer Anda, menempati setiap sudut dan celah, dan mereka saling bertarung dalam mode John Cleeseian.
Eric Leschinski
1

Bagi siapa pun yang tertarik, saya menulis artikel selangkah demi selangkah yang lebih verbose tentang cara menginstal Python 3.3.2 secara lokal dari sumber di Ubuntu 12.04, sebagian besar didasarkan pada membaca jawaban yang sangat baik dari @ sergey di atas: http://nicholsonjf.com/ blog / instal-python3-lokal-dari-sumber

James Nicholson
sumber
1

Saya telah menulis sebuah skrip untuk mengotomatiskan semua pengunduhan, kompilasi, dan pemasangan versi Python non-paket. Skrip menginstal versi Python /optdengan aman jauh dari manajer paket dan versi sistem Python.

Itu bahkan mengambil dependensi juga untuk sebagian besar versi Ubuntu. Ini harus bekerja pada semua versi Ubuntu yang saat ini didukung (10,04, 12,04, 12,10, dan 13,04), dan mungkin pada versi lain.

Saya memasukkannya di bawah ini, dan telah mempostingnya juga di repositori Github saya , yang merupakan lokasi master.

Script harus disalin dan disimpan ke dalam editor teks seperti, misalnya, build_pythondan dibuat executable ( chmod u+x build_python) dan kemudian dapat dijalankan dengan dua parameter, di mana parameter pertama harus selalu menjadi cabang Python, dan parameter kedua harus selalu menjadi Versi python.

Lihat python.org untuk daftar untuk versi yang ingin Anda kompilasi.

Berikut adalah beberapa contoh penggunaan skrip:

  1. Untuk rilis stabil, setelah memeriksa daftar, dapat dijalankan sebagai

    ./build_python '3.3.2' '3.3.2'
  2. Untuk rilis pengembangan, di mana kedua parameter berbeda dalam daftar, itu dapat dijalankan sebagai:

    ./build_python '3.4.0' '3.4.0a1'

Isi skrip direproduksi di bawah ini (tidak ada penyorotan sintaks di sini. Untuk itu, lihat halaman Github saya :

#!/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}

sumber
1

Peringatan : Pythonbrew telah ditinggalkan karena pyenv. Instruksi yang diperbarui ada di sini

Anda juga dapat menggunakan sesuatu seperti pythonbrew :

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

Ini cukup mudah digunakan, dan manfaat lain, adalah mungkin untuk menginstal versi python yang Anda butuhkan. Silakan lihat dokumen mereka untuk detail mode

Alexey Savanovich
sumber
0

Berikut langkah-langkah yang saya ikuti:

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
sumber