Як встановити Python 3.3?


103

Я завантажив Python 3.3 з офіційного сайту, але не знаю, як його встановити.

Я використовую Ubuntu 12.04


Чому я не можу оновити програми без оновлення всієї ОС? пояснює, чому вона недоступна. Коротше кажучи: інші пакети покладаються на більш стару (досі підтримується!) Версію. І будь ласка, зберігайте свої особисті думки про те, як працює цей сайт для себе, або опублікуйте його на мета-файлі, де ви зможете розмістити повідомлення, як тільки наберете достатньо балів репутації . Але спочатку: FAQ про те, як працює сайт.
gertvdijk

Відповіді:


113

Python 3.3 вийшов 29 вересня 2012 року, через кілька місяців після виходу Ubuntu 12.04. Він включений в Ubuntu 12.10, хоча як python3.3пакет

Якщо ви хочете встановити Python 3.3 у версії Ubuntu, яка не має його у своїх сховищах, у вас є наступні параметри:

Використовуйте PPA

Існує PPA, що містить старі та нові версії Python, які підтримує Фелікс Крулл. Дивіться відповідь Luper Rouch щодо інструкцій із встановлення.

Компілюйте Python з джерела

Це дуже просто і дозволяє вам мати декілька версій Python, не возившись із системним інтерпретатором python (який використовується багатьма власними програмами Ubuntu). На своїй машині розробки я маю буквально десятки різних версій Python від 2,4 до 3,2, які живуть щасливо /opt.

нам потрібен компілятор C та інші речі, щоб скласти Python

sudo apt-get install build-essential

SQLite libs необхідно встановити для того, щоб Python мав підтримку SQLite.

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

Завантажте і компілюйте 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

Деякі приємні штрихи до встановлення pyкоманди, створивши символьне посилання:

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

Крім того, ви можете встановити псевдонім bash з ім'ям py:

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

І це все. Тепер ви можете мати будь-яку версію Python, навіть альфа, або, скажімо, мати кілька копій Python 3.3, складених з різними налаштуваннями ... не дуже багато людей потребують цього :)

Використовуйте pyenv

Існує програмне забезпечення під назвою pyenv, яке може допомогти вам автоматизувати процедуру - це, по суті, це компілювати Python з джерела, встановивши його в домашній каталог. Його мета - допомогти вам керувати кількома версіями Python.


1
Після установки, як би один використовувати цей альтернативний варіант установки Python? Скажіть, у мене є кілька .pyфайлів із #!/usr/bin/env pythonрядком shebang (виконаний біт), як я змушу їх використовувати цю установку, /opt/python3.3не змінюючи їх усіх? Або навіть встановлені системою.
gertvdijk

1
@gertvdijk: вся справа в тому, щоб не замінити інтерпретатора за замовчуванням - якщо ви це зробите, то кожна програма python, запущена з вашого облікового запису, буде використовувати Python 3.3, включаючи додатки Ubuntu, такі як Software Center ect. Ми цього не хочемо. Для запуску сценарію просто використовуйте py myscript.py(де pyє символьне посилання, яке ми створили наприкінці вправи). Я також зазвичай використовую virtualenv або buildout для своїх проектів.
Сергій

1
@gertvdijk Ви можете підтримувати керування кількома середовищами python за допомогою virtualenv.
Flup

@gertvdijk Чи знаєте ви, що python 3.x та python 2.x несумісні? Якби ви вказали всі існуючі сценарії на python 3.3, вони, ймовірно, зламаються. Просто shebang ваші нові сценарії python як #! /opt/python3.3 і правильний інтерпретатор буде адресовано під час його запуску.
Тоні Мартін

1
mkdir ~/bin ln -s /opt/python3.3/bin/python ~/bin/pyне працює для мене. Я виявив, що це /opt/python3.3/bin/pythonмає бути /opt/python3.3/bin/python3, але все одно отримую py: command not found. Будь-які пропозиції.

43

Ось що я зробив, щоб встановити Python 3.3 на Ubuntu 12.04:

  1. Встановити залежності:

    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:

    wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz
  3. Витяг:

    tar xvfz Python-3.3.0.tgz
  4. Налаштування та встановлення:

    cd Python-3.3.0
    ./configure --prefix=/opt/python3.3
    make  
    sudo make install
    
  5. Перевірте, чи спрацювало:

    /opt/python3.3/bin/python3

Ви повинні побачити щось подібне:

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

Деякі додаткові речі, які корисні ... Ви можете створити віртуальне середовище у своєму будинку та просто активувати Python 3.3 на вимогу.

  1. Створіть у своєму будинку віртуальне середовище:

    /opt/python3.3/bin/pyvenv ~/py33
  2. Активуйте virtualenv:

    source ~/py33/bin/activate
  3. Встановіть інструменти розповсюдження:

    wget http://python-distribute.org/distribute_setup.py
    python distribute_setup.py
    
  4. Встановити піп:

    easy_install pip
  5. Встановіть будь-які пакунки python (наприклад, пляшку)

    pip install bottle

Насолоджуйтесь!


sudo apt-get build-dep python3.2? Ви, мабуть, забули installміж ними :)
Stam Kaly

1
@StamKaly: ні. build-depне пакет, це apt-get дієслово (як install). Це означає " встановити всі пакунки, необхідні для складання потрібного вихідного пакета "
MestreLion

35

У deadsnakes PPA має пакети для старих і нових версій 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

Так, це встановило щось гаразд, але як це викликати? Введення «python» дає інтерпретатор python 2 methe, а введення «python3» дозволяє припустити, що його не встановлено та його можна встановити з rebu ubuntu.
kris

Ах..Я бачу, що виконуваний файл називається python3.3 (або pythonX.Y, для будь-якої інстальованої версії python :-)
kris

ppa: fkrull / deadsnakes архівується. Використовуйте замість ppa: deadsnakes / ppa.
codefool

10

Ubuntu 14.04 і новіші версії:

Python2.7 за замовчуванням. Використовуйте менеджер пакунків, щоб встановити python3 поверх звичайного python на Ubuntu, Ubuntu може одночасно обробляти 2.7 та 3.2 без virtualenv:

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

Ubuntu 18.04:

Python3 за замовчуванням з ОС, і Python2.7 недоступний, якщо ви спеціально не встановлюєте.

Три назви пакетів на вибір: python, python-minimal, python-all. За замовчуванням мінімальний. Ці слова є лише прапорами у сховищах Ubuntu, щоб вони містили додаткові матеріали чи ні. Щоб точно побачити, які підпакети є, а не включені, перегляньте підпакети: https://packages.ubuntu.com/bionic/python

sudo apt install python-minimal
python --version

Або спробувати оновити python3:

sudo apt install python3-minimal
python --version

Щоб спробувати застосувати певну версію, ви можете спробувати передати параметр версії:

sudo apt-get install python 3.3.3

1
Як оновити версію python3 з 3.2.3 до 3.3.5?
anon58192932

2
Python 3.3 доступний лише у сховищах за замовчуванням у Ubuntu 12.10 та новіших версій. ОП використовує 12.04
Ленна

Якщо ви хочете, щоб на одному комп'ютері були доступні більше 2 версій python (крім стандартних 2.7 та 3.2, які ваша ОС обрала для вас), то кожна нова версія python повинна знаходитись у власному віртуальному середовищі ( virtualenv). Пошук Google: "Використовуйте virtualenv для ізоляції версії python". Якщо ви не використовуєте якийсь контейнер, то ви піддаєте себе лабіринту проблем, оскільки python на всіх комп’ютерах займає гігантське лайно, займаючи всі куточки, і вони б'ються між собою, як Джон Клізіан.
Ерік Лещинський


1

Я написав сценарій для автоматизації всіх завантажувальних, компілюючих та встановлених непакетних версій Python. Сценарій встановлює версію Python у /optбезпечній подалі від менеджера пакунків та системних версій Python.

Він навіть отримує залежності, як і для більшості версій Ubuntu. Він повинен працювати на всіх підтримуваних на даний момент версіях Ubuntu (10.04, 12.04, 12.10 та 13.04) та, ймовірно, на інших версіях.

Я включаю його нижче і розміщую його також у моєму сховищі Github , яке є головним місцем розташування.

Сценарій слід скопіювати і зберегти у текстовому редакторі як, наприклад, build_pythonі зробити його виконуваним ( chmod u+x build_python), а потім можна запустити з двома параметрами, де перший параметр завжди повинен бути гілкою Python, а другий параметр повинен бути завжди Версія Python.

Див. Python.org для переліків версії, яку ви хочете скласти.

Ось пару приклад використання сценарію:

  1. Для стабільного випуску після перевірки списків його можна запустити як

    ./build_python '3.3.2' '3.3.2'
  2. Для випуску розробки, де два параметри в списках різні, його можна запустити як:

    ./build_python '3.4.0' '3.4.0a1'

Тіло сценарію відтворено нижче (тут немає підкреслення синтаксису. Для цього див. Мою сторінку 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}

1

Попередження : Pythonbrew застарів на користь pyenv. Оновлені інструкції можна знайти тут

Також ви можете використовувати щось на зразок pythonbrew :

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

Це досить просто у використанні та ще одна перевага - це можливість встановити будь-яку потрібну вам версію python. Детальні відомості про режим дивіться у їхніх документах


0

Ось наступні кроки:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.