Python 3.3'ü nasıl kurarım?


103

Resmi siteden Python 3.3'ü indirdim ancak nasıl yükleneceği hakkında hiçbir fikrim yok.

Ubuntu 12.04 kullanıyorum


Tüm işletim sistemini yükseltmeden uygulamaları neden güncelleyemiyorum? neden uygun olmadığını açıklar . Kısacası: diğer paketler daha eski (hala korunuyor!) Bir versiyona güveniyor. Ve bu site kendiniz için nasıl çalıştığı hakkında kişisel düşüncelerini tutmak veya üzerinde yazı lütfen meta kazandığınız sonra şunları gönderebilir yeterince itibar puanı . Ama önce: sitenin nasıl çalıştığı hakkında SSS .
gertvdijk

Yanıtlar:


113

Python 3.3, Ubuntu 12.04'ün piyasaya sürülmesinden birkaç ay sonra 29 Eylül 2012'de serbest bırakıldı. python3.3Paket olarak Ubuntu 12.10'a dahil edilmiştir.

Python 3.3'ü, depolarında bulunmayan Ubuntu sürümüne kurmak istiyorsanız, aşağıdaki seçeneklere sahipsiniz:

Bir PPA kullanın

Felix Krull tarafından tutulan Eski ve Yeni Python sürümlerini içeren bir PPA var . Kurulum talimatları için Luper Rouch'un cevabına bakınız .

Python'u kaynaktan derleme

Bu çok kolaydır ve sistem python yorumlayıcısı ile karıştırılmadan birden fazla Python sürümüne sahip olmanıza izin verir (birçok Ubuntu kendi programı tarafından kullanılır). Dev makinemde tam anlamıyla mutlu bir şekilde yaşayan 2.4'ten 3.2'ye kadar farklı Python sürümleri var /opt.

Python'u derlemek için C derleyicisine ve diğer öğelere ihtiyacımız var

sudo apt-get install build-essential

Python'un SQLite desteğine sahip olması için SQLite lib'lerinin kurulması gerekir.

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

Python'u indirin ve derleyin:

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

pyBir sembolik link oluşturarak bir komut yüklemek için bazı güzel dokunuşlar :

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

Alternatif olarak, pybunun yerine adında bir bash diğer adı da yükleyebilirsiniz :

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

Ve işte bu. Artık herhangi bir Python sürümüne sahip olabilirsiniz , bir alfa bile, ya da diyelim, Python 3.3'ün birkaç kopyasının farklı ayarlarla derlenmiş olması ... birçok insanın buna ihtiyacı olsa bile değil :)

Pyenv kullan

Pyenv adında , prosedürü otomatikleştirmenize yardımcı olabilecek bir yazılım var - temelde yaptığı şey Python'u kaynağından derlemek ve ana dizininize yüklemek. Amacı, çoklu Python sürümlerini yönetmenize yardımcı olmaktır.


1
Kurulumdan sonra, bu alternatif Python kurulumunu nasıl kullanırsınız ? Shebang hattıyla (çalıştırılabilir bit kümesi) bazı .pydosyalarım olduğunu #!/usr/bin/env pythonvarsayalım, hepsini /opt/python3.3değiştirmeden bu yüklemeyi kullanmalarını nasıl sağlayabilirim? Hatta sisteme kurulmuş olanları bile.
gertvdijk

1
@gertvdijk: asıl amaç varsayılan tercümanı değiştirmek değildir - bunu yaparsanız , hesabınızdan çalıştırılan her python uygulaması, Software Center vb. Ubuntu uygulamaları da dahil olmak üzere Python 3.3'ü kullanır. Bunu istemiyoruz. Bir betiği çalıştırmak için, sadece kullanın py myscript.py( pyalıştırma sonunda oluşturduğumuz bir sembolik link). Ayrıca normalde projelerim için virtualenv veya buildout kullanıyorum.
Sergey

1
@gertvdijk Birden çok python ortamını virtualenv kullanarak yönetilebilir tutabilirsiniz.
FLUP

@gertvdijk python 3.x ve python 2.x'in uyumsuz olduğunu biliyor musunuz? Mevcut tüm scriptlerinizi python 3.3'te gösterecekseniz, muhtemelen kırılırlardı. Yeni python komut dosyalarınızı # olarak görün! /opt/python3.3 ve doğru yorumlayıcı çalıştırdığınızda ele alınacak.
Tony Martin

1
mkdir ~/bin ln -s /opt/python3.3/bin/python ~/bin/pybenim için çalışmıyor /opt/python3.3/bin/pythonOlması gerektiğini buldum /opt/python3.3/bin/python3ama yine de py: command not found. Baska öneri.

43

İşte Python 3.3'ü Ubuntu 12.04'e yüklemek için yaptıklarım:

  1. Bağımlılıkları yükle:

    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. Python 3.3.0'ı İndirin:

    wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz
  3. Ayıkla:

    tar xvfz Python-3.3.0.tgz
  4. Yapılandır ve Yükle:

    cd Python-3.3.0
    ./configure --prefix=/opt/python3.3
    make  
    sudo make install
    
  5. İşe yarayıp yaramadığını test et:

    /opt/python3.3/bin/python3

Benzer bir şey görmelisin:

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

Yararlı olan bazı ek şeyler ... evinizde sanal bir ortam yaratabilir ve talep üzerine Python 3.3'ü aktif hale getirebilirsiniz.

  1. Evinizde bir Sanal Ortam oluşturun:

    /opt/python3.3/bin/pyvenv ~/py33
  2. Virtualenv'i etkinleştirin:

    source ~/py33/bin/activate
  3. Dağıtım araçlarını yükleyin:

    wget http://python-distribute.org/distribute_setup.py
    python distribute_setup.py
    
  4. Pip yükleyin:

    easy_install pip
  5. İstediğiniz python paketlerini kurun (yani şişe)

    pip install bottle

Keyfini çıkarın!


sudo apt-get build-dep python3.2? Muhtemelen installarasında unuttum :)
Stam Kaly

1
@StamKaly: hayır. build-depbir paket değil, bir apt-get fiildir (benzeri install). " İstenen kaynak paketleri oluşturmak için gerekli tüm paketleri kurun "
MestreLion

35

Deadsnakes PPA eski ve yeni piton sürümleri için paketler vardır:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.3

Evet, bu doğru bir şey kurdu, ama nasıl çağırırım? 'Python' yazmak, python 2 yorumlayıcısını verir ve 'python3' yazmak, ubuntu repolarından yüklenmediğini ve kurulabileceğini gösterir.
kris

Ah..... çalıştırılabilir dosyaya python3.3 (ya da pythonX.Y denir), Python'un hangi sürümü yüklü olursa olsun :-)
kris

ppa: fkrull / deadsnakes arşivlendi. Bunun yerine ppa: deadsnakes / ppa kullanın.
codefool

10

Ubuntu 14.04 ve öncesi:

Python2.7 varsayılan olarak gelir, Ubuntu'da düzenli python üzerine python3'ü kurmak için paket yöneticisini kullanın, Ubuntu hem sanal hem de 3.2 olmadan aynı anda hem 2.7 hem de 3.2'yi işleyebilir:

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

Ubuntu 18.04:

Python3 varsayılan işletim sistemi ile birlikte gelir ve özellikle yüklemediğiniz sürece Python2.7 kullanılamaz.

Üç paket isimleri seçmek için: python, python-minimal, python-all. Varsayılan minimumdur. Bu kelimeler sadece Ubuntu depolarına ilave malzeme eklenip eklenmeyeceği bayraklarıdır. Tam olarak hangi alt paketlerin dahil edildiğini ve dahil edilmediğini görmek için aşağıdaki alt paketlere bakın: https://packages.ubuntu.com/bionic/python

sudo apt install python-minimal
python --version

Veya python3'ü yükseltmeyi denemek için:

sudo apt install python3-minimal
python --version

Belirli bir sürümü zorlamak için bir sürüm parametresini geçmeyi deneyebilirsiniz:

sudo apt-get install python 3.3.3

1
Python3 sürümünü 3.2.3'ten 3.3.5'e nasıl güncellersiniz?
anon58192932

2
Python 3.3 yalnızca Ubuntu 12.10 ve sonraki sürümlerde bulunan varsayılan depolardan kullanılabilir. OP, 12.04
Lenna

Bir bilgisayarda 2'den fazla python sürümü mevcutsa (işletim sisteminizin sizin için seçtiği varsayılan 2.7 ve 3.2 dışında), her yeni python sürümü kendi sanal ortamında olmalıdır ( virtualenv). Google arama: "Python sürümünü izole etmek için sanalenv kullanın". Bir tür kap kullanmazsanız, o zaman kendinizi pitonun bir labirentine maruz bırakırsınız, çünkü python bilgisayarınızın her yerinde büyük bir bok alır, her köşesinde ve kafasında yer alır ve birbirleriyle John Cleeseian tarzında savaşırlar.
Eric Leschinski


1

Paket olmayan Python sürümlerini indirme, derleme ve yükleme işlemlerini otomatikleştirmek için bir komut dosyası yazdım. Komut dosyası, Python sürümünü Python'un /optpaket yöneticisinden ve sistem sürümlerinden güvenli bir şekilde kurar .

Hatta Ubuntu'nun çoğu sürümünde de bağımlılıkları getirir. Şu anda desteklenen tüm Ubuntu sürümlerinde (10.04, 12.04, 12.10 ve 13.04) ve muhtemelen diğer sürümlerde çalışmalıdır.

Aşağıya ekliyorum ve aynı zamanda ana konum olan Github depomda yayınladım .

Betik, örneğin bir metin editörüne kopyalanmalı ve kaydedilmeli build_pythonve çalıştırılabilir ( chmod u+x build_python) olmalı ve daha sonra iki parametreyle çalıştırılabilir; burada ilk parametre her zaman Python dalı olmalı ve ikinci parametre daima Python sürümü

Bkz python.org derlemek isteyen sürümü için listeleri için.

İşte betiğin kullanımına bir kaç örnek:

  1. Kararlı sürüm için, listeleri kontrol ettikten sonra,

    ./build_python '3.3.2' '3.3.2'
  2. İki parametrenin listelerde farklı olduğu geliştirme sürümü için şu şekilde çalıştırılabilir:

    ./build_python '3.4.0' '3.4.0a1'

Komut dosyasının gövdesi aşağıda çoğaltılmıştır (burada vurgulanan sözdizimi yoktur. Bunun için Github sayfama bakın :

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

1

Uyarı : Pythonbrew, pyenv lehine kaldırıldı. Güncel talimatlar burada

Ayrıca pythonbrew gibi bir şey kullanabilirsiniz :

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

İhtiyacınız olan herhangi bir python sürümünü kurmanızın kullanımı oldukça kolaydır ve başka bir avantajı vardır. Lütfen mod detayları için dokümanlarına bakınız.


0

İşte izlediğim adımlar:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.