Как мне установить 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). На моей dev-машине у меня буквально десятки разных версий Python от 2.4 до 3.2, в которых я живу счастливо /opt.

нам нужен компилятор C и другие вещи для компиляции Python

sudo apt-get install build-essential

Для поддержки SQLite в 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 и т. д. Мы этого не хотим. Чтобы запустить скрипт, просто используйте py myscript.py(где pyнаходится символическая ссылка, которую мы создали в конце упражнения). Я также обычно использую virtualenv или buildout для своих проектов.
Сергей
1
@gertvdijk Вы можете поддерживать управление несколькими средами python с помощью virtualenv.
флоп
@gertvdijk Знаете ли вы, что python 3.x и python 2.x несовместимы? Если бы вы указали все свои существующие скрипты на python 3.3, они, вероятно, сломались бы. Просто добавьте ваши новые скрипты 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между ними :)
Стам
1
@StamKaly: нет. build-depэто не пакет, это apt-get глагол (как install). Это означает « установить все пакеты, необходимые для сборки запрошенных исходных пакетов »
MestreLion
35

У PPA deadsnakes есть пакеты для старых и новых версий 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
источник
Да, это установило что-то хорошо, но как мне это вызвать? Ввод «python» дает мне интерпретатор python 2, а ввод «python3» предполагает, что он не установлен и может быть установлен из репозиториев Ubuntu.
Крис
Ах .. я вижу, что исполняемый файл называется 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 3.3.2 локально из исходного кода в Ubuntu 12.04, в основном на основе чтения превосходного ответа @ sergey выше: http://nicholsonjf.com/ блог / установка-python3 локально-из-источника

Джеймс Николсон
источник
1

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

Он даже выбирает зависимости для большинства версий Ubuntu. Он должен работать на всех поддерживаемых в настоящее время версиях Ubuntu (10.04, 12.04, 12.10 и 13.04) и, возможно, на других версиях.

Я включил это ниже, и разместил это также в моем репозитории Github , который является главным местоположением.

Сценарий должен быть скопирован и сохранен в текстовом редакторе, как, например, build_pythonи сделан executeable ( 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
Tarun
источник