我如何安装Python 3.3?
我从官方网站下载了Python 3.3,但不知道如何安装它。
我正在使用Ubuntu 12.04
Python 3.3已于2012年9月29日发布, 即 Ubuntu 12.04发布几个月后发布。 它作为python3.3
包包含在Ubuntu 12.10中
如果要在Ubuntu版本上安装Python 3.3,而在其存储库中没有它,则可以使用以下选项:
使用PPA
有一个PPA包含由Felix Krull维护的新旧Python版本 。 有关安装说明,请参阅Luper Rouch的答案 。
从源代码编译Python
这非常简单,允许您拥有多个Python版本而不会弄乱系统python解释器(许多Ubuntu自己的程序使用它)。 在我的开发机器上,我有几十种不同的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
或者,您可以安装名为py
的bash别名:
echo 'alias py="/opt/python3.3/bin/python3.3"' >> .bashrc
就是这样。 现在你可以拥有任何 Python版本,甚至是alpha版本,或者说,可以使用不同的设置编译一些Python 3.3的副本……并不是很多人需要它:)
使用pyenv
有一个名为pyenv的软件可以帮助你自动化程序 – 它本质上做的是从源代码编译Python,将它安装在你的主目录中。 它的目标是帮助您管理多个Python版本。
以下是我在Ubuntu 12.04上安装Python 3.3所做的工作:
-
安装依赖项:
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
-
下载Python 3.3.0:
wget http://python.org/ftp/python/3.3.0/Python-3.3.0.tgz
-
提取:
tar xvfz Python-3.3.0.tgz
-
配置和安装:
cd Python-3.3.0 ./configure --prefix=/opt/python3.3 make sudo make install
-
测试它是否有效:
/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。
-
在您的家中创建虚拟环境:
/opt/python3.3/bin/pyvenv ~/py33
-
激活virtualenv:
source ~/py33/bin/activate
-
安装分发工具:
wget http://python-distribute.org/distribute_setup.py python distribute_setup.py
-
安装点子:
easy_install pip
-
安装你想要的任何python包(即瓶子)
pip install bottle
请享用!
死神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
Ubuntu 14.04及更早版本:
Python2.7是默认的,使用包管理器在Ubuntu上的常规python上安装python3,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
对于任何有兴趣的人,我写了一篇关于如何在Ubuntu 12.04上从源代码本地安装Python 3.3.2的详细一步一步的文章,主要是基于阅读@ sergey上面的优秀答案: http : //nicholsonjf.com/博客/安装-python3-本地从源
我编写了一个脚本来自动化所有下载,编译和安装非包Python版本。 该脚本在/opt
安装Python版本,远离包管理器和Python的系统版本。
它甚至可以为大多数Ubuntu版本提取依赖项。 它应该适用于所有当前支持的Ubuntu版本(10.04,12.04,12.10和13.04),可能适用于其他版本。
我将它包含在下面,并将它也发布在我的Github存储库中 ,这是主要位置。
应该复制脚本并将其保存到文本编辑器中,例如build_python
,并使其成为可执行文件( chmod u+x build_python
),然后可以使用两个参数运行,其中第一个参数必须始终是Python分支,并且第二个参数必须始终是Python版本。
有关您要编译的版本的列表,请参阅python.org 。
以下是脚本用法的几个示例:
-
对于稳定版本,在检查列表后,可以运行为
./build_python '3.3.2' '3.3.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 . ########## # a script to compile the latest stable version of Python and place in /opt (( $# == 2 )) || { printf "Please provide a version branch (eg 3.4.0) and a version release (eg 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, ie 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 <
警告 :已弃用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版本。 有关模式详细信息,请参阅其文档
以下是我遵循的步骤:
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