如何使用apt-get安装Python 3.6?

我已经尝试了正常的方法,即sudo apt-get install python3.6,但是...嗯...那没用。
那么,我该怎么做呢?(最好不要自己构建)
我正在使用Ubuntu 16.04。

5也许你的发行版不支持 Python 3.6。如果你已经安装了 aptitude,请运行 aptitude search python3 - ridgy
9个回答

Ubuntu 14.04(Trusty)和16.04(Xenial)

Deadsnakes删除了对16.04的支持。您可以暂时使用此非官方仓库。 https://github.com/deadsnakes/issues/issues/195

sudo add-apt-repository -y ppa:jblgf0/python
sudo apt-get update
sudo apt-get install python3.6

J. Fernyhough的PPA曾经是一个备选选项,但他已关闭以抗议滥用。
注意:似乎这个ppa仓库只支持Python 3.8及以下版本,并关闭了旧的Python 3.6仓库,但仍无法安装pip。
Ubuntu 16.10和17.04
如果您使用的是Ubuntu 16.10或17.04,则Python 3.6位于宇宙仓库中,所以您只需运行:
sudo apt-get update
sudo apt-get install python3.6

在Ubuntu 14.04、16.04、16.10和17.04安装后

要调用Python 3.6解释器,请运行python3.6

Ubuntu 17.10、18.04(Bionic)及以后版本

Ubuntu 17.10和18.04已经默认安装了Python 3.6。只需运行python3即可调用它。


2@Olian04 没问题!作为一个普通的提示,J Fernyhough在https://launchpad.net/~jonathonf上有很多有用的PPA。如果你需要PPA,请务必去那里查看。 - edwinksl
6请注意,Ubuntu 16.10 中的 Python3.6 是一个测试版本,存在一些问题(例如在某些罕见情况下会出现非常严重的 dict 内存泄漏问题)。 - Marius Gedminas
1pyenv直接从Python.org下载发布版本,并且通常会在新版本(预发布版或正式版)可用后的24小时内进行更新!您还可以指示pyenv安装开发分支,它将克隆适当的CPython存储库分支并为您构建。 - Nick T
在这两种情况下,你可以给维护存储库的人发送电子邮件或提交错误报告,并希望他们升级他们的Python版本。 - edwinksl
1ppa:jonathonf/python-3.6 目前已经发布最终版本,太棒了! - Marius Gedminas
2看起来 ppa:jonathonf 版本的 Python 3.6 并没有包含 pip 或者 ensurepip,所以安装软件包变得非常困难。我该如何解决这个问题呢? - Migwell
@Miguel - 手动安装pip?只需获取get-pip.py并运行它即可。 - Fake Name
134注意 - 无论如何都不要被诱惑运行sudo apt remove python3.5或类似的命令;Python在Ubuntu中的嵌入程度比你想象的更深,这样做可能会破坏你的Ubuntu安装。如果你想让python3映射到python3.6,请创建一个符号链接! - Huw Walters
虽然Ubuntu 16.10有3.6.0~b2-1版本,但17.04则带有3.6.1-1版本。在16.10上似乎没有简单的方法来获取python 3.6.1,所以升级似乎是必要的。 - Maxime R.
@MaximeR。16.10也已经终止支持,所以人们应该无论如何升级到17.04版。 - edwinksl
31我看到没有python3.6-pip软件包,所以我使用了curl https://bootstrap.pypa.io/get-pip.py | sudo python3.6来安装pip - Asclepius
如何运行libpython3.6-testsuite中的测试? - Asclepius
看起来,对于deadsnakes的最新建议是使用ppa:deadsnakes/ppa而不是fkrull。 - Jason R. Coombs
这样安装的话,Python 3.6会与16.04上的Python 3.5并存,不会覆盖原有设置。 - Thomas Ward
@ThomasWard 一起并列。我应该在回答中包含这个信息。 - edwinksl
5一些方式,从ppa:jonathonf/python-3.6安装的Python在14.04上出现了损坏的pip和没有easy_install的问题。不过,我通过安装easy_install然后通过curl https://bootstrap.pypa.io/ez_setup.py -o - | python3.6 && python3.6 -m easy_install pip重新安装pip来解决了这个问题。以防万一有人遇到相同的问题... - FirefoxMetzger
在16.04版本中,移除python3软件包导致了Unity的故障。重新安装python3软件包和unity解决了这个问题。 - Stphane
@Stphane 是的,但你为什么一开始要移除 python3 包呢?它对于操作系统的正常运行是必不可少的。 - edwinksl
@edwinksl 是的,我猜是这样。问题是,我看到安装了Python 2.7,所以我认为这是主要发行包依赖的版本(我知道这是新手的假设,但那时已经很晚了,感觉有点像是我不应该按下的红色按钮),最重要的是,我测试的计算机本来就要重新安装。 - Stphane
1您可能还需要sudo apt-get install python3.6-dev - nu everest
6和上面的一些评论者一样,我也遇到了使用ppa:jonathonf/python-3.6安装pip的问题。另一方面,ppa:deadsnakes/ppa却完美地运行了(apt-get install python3.6 python3.6-venv -y)。 - Michael Herrmann
@MichaelHerrmann 好的,我会交换这两个PPA的顺序,这样人们就会先尝试 deadsnakes PPA。 - edwinksl
@edwinksl 是的,太好了,谢谢。deadsnakes 这个版本还有一个更新的 Python 版本(3.6.4 而不是 3.6.3)。 - Michael Herrmann
2那么哪个仓库更好,Ferny还是Felix? - wordsforthewise
我遇到了E: Package 'python3.6' has no installation candidate这个问题。 - k5f
@k5f 你运行了 sudo apt update 吗? - edwinksl
@edwinksl 我试过了,但没有用。我改用pyenv安装,一切都很好。谢谢你的关心。 - k5f
1@wordsforthewise 目前有几个人(包括我自己)似乎在使用 jonathonf 仓库时遇到了问题,所以目前 deadsnakes 仓库似乎是稳定的选择。另请参阅 https://askubuntu.com/a/1034266/320633 - Jonas Dahlbæk
你怎样让Python3.6找到已安装的包呢?当我尝试"import pandas"时,它给出了"ModuleNotFoundError: No module named 'pandas'"的错误,尽管在Python 3.5中可以正常导入。 - Simd
1在AWS上,使用社区版Ubuntu 16.04。
sudo add-apt-repository ppa:deadsnakes/ppa [无效]
sudo add-apt-repository ppa:jonathonf/python-3.6 [有效]
- CodingMatters
2@Huw 如果你是指更改 /usr/bin/python3 的符号链接,那也不是一个好主意。在我看来,使用别名会更好。请参考Gnome终端无法启动以了解后果的示例。 - wjandrea
1Ubuntu 18.04:我按照上述描述使用了deadsnakes PPA,没有遇到任何问题。 - Jonathan
1死蛇在3.7版本中运行良好。 - Asclepius
安装了deadsnakes包后,pip3没有出现任何问题,但我不知道如何更新它。 - lurscher
在Ubuntu 18.04上安装pip的简单方法是:sudo apt install python3-pip. - Quitiweb
1你能删除 https://launchpad.net/~jonathonf 的仓库吗?他在抗议中禁用了这个仓库,让所有人都无法使用。Deadsnake 可以访问 Python3.6。 - Ahmed
逐步指南,包括手动安装和通过PPA安装的步骤。 - Petr Vepřek
1截至2021年,deadsnakes不提供Python3.6,因为"上游Ubuntu提供了这些软件包。"https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa - ejke

我建议使用pyenv来解决你的问题。它不使用Aptitude,但是需要"自己构建",但是它是完全自动化的。你只需输入pyenv install 3.6.0就可以构建和安装新版本(或旧版本)的Python。所有操作都在用户下运行,因此您不必担心损坏Ubuntu本身使用的Python
此外,回答后续问题"如何使用apt-get安装Python 3.7?"也是相同的答案:pyenv update; pyenv install 3.7.0。它通常会在发布当天工作,因为您不需要等待其他人将其打包到Ubuntu中。查看您可以安装的所有版本:pyenv install --list

安装pyenv

  1. 安装构建CPython所需的工具和头文件(例如PyPy或Jython等特殊版本的Python可能有其他依赖项)。pyenv使用Git,它还可以构建/安装源代码分支,因此您可以安装最新的3.8版本,即从GitHub上获取的CPython的主分支:

    sudo apt-get install -y git
    sudo apt-get install -y build-essential libbz2-dev libssl-dev libreadline-dev \
                            libffi-dev libsqlite3-dev tk-dev
    
    # 可选的科学包头文件(用于Numpy、Matplotlib、SciPy等)
    sudo apt-get install -y libpng-dev libfreetype6-dev    
    
  2. 运行安装脚本(安装pyenv和一些非常有用的pyenv插件,由原作者提供;更多信息请参见这里

    curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
    
  3. 将初始化命令添加到您的~/.profile~/.bashrc文件中(安装脚本的末尾有提到):

    export PATH="$HOME/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    
  4. 重新启动您的shell(关闭并打开,或者执行exec $SHELL)或重新加载配置文件(例如source ~/.bashrc

完成!

设置环境

为了不触碰系统Python(通常是个坏主意;操作系统级别的服务可能依赖于某些特定的库版本等),创建自己的环境非常简单!更好的是,无需使用sudopip安装!

  1. 安装您偏好的Python版本(这将下载源代码并为您的用户构建它,无需输入)

    pyenv install 3.6.0
    
  2. 将其设置为virtualenv,以便稍后可以创建其他虚拟环境

    pyenv virtualenv 3.6.0 general
    
  3. 全局激活它(对于您的用户)

    pyenv global general
    
  4. 随意使用Python/pip等。它是您的。

如果你想稍后清理你的库,你可以删除虚拟环境(`pyenv uninstall general`)或创建一个新的(`pyenv virtualenv 3.6.0 other_proj`)。你也可以在每个目录下设置活动环境:`pyenv local other_proj`会在当前文件夹中生成一个`.python-version`文件,当你从该文件夹中调用Python或pip安装的Python工具时,它们将被pyenv代理。

故障排除

  • bash: pyenv: command not found, fish: Unknown command 'pyenv'

    1. 检查你的$PATH,应该有一个条目以.pyenv/bin结尾。如果缺少,请确保你按照上面的“安装pyenv”中的第3步和第4步(重新启动你的shell)进行操作。
  • pyenv: no such command 'virtualenv'

    1. 如果你没有使用安装脚本,那么你可能只安装了根pyenv包。请参考pyenv-virtualenv中的说明来添加插件。
    2. 如果你使用了安装脚本,请检查它是否在pyenv commands中显示。

1在使用pyenv与Python 2.x(或者早期的3.x版本,在新的Unicode字符串内部表示出现之前)时,有一个需要注意的地方:pyenv使用默认的上游编译标志,并构建16位Unicode字符串。 Linux发行版通常使用32位Unicode字符串进行构建。 这会导致当您pip安装一些东西到pyenv和非pyenv Python中时会产生问题,因为pip wheel缓存的原因。 - Marius Gedminas
@marius 为什么在安装了pyenv之后还会使用非pyenv版本呢? - Nick T
3我不知道,但是通过帮助IRC上的某人调试一个问题,我发现了这个问题。一个特定的Python包(lxml?)由于这个问题而无法工作。所以在实践中,对一些人来说确实会发生,并且值得知道。(解决方法是rm -r ~/.cache/pip/wheels/。) - Marius Gedminas
在安装Python之前,可能需要先安装tk-dev软件包。这样,pyenv将会安装带有tkinter模块的Python。这在python3-tk模块在存储库中没有更新的情况下可能非常有用(在我的情况下,只适用于Python 3.5)。 - gc5
@MariusGedminas 是的,lxml包和/或distutils和/或pip存在一些bug,它会缓存系统Python的构建,该构建具有不同的Unicode类型,然后尝试将其重用于未应用下游Ubuntu补丁以调整这些设置的标准CPython构建。让我很难过,像那样的稻草填满了“Python 3 sucks”的稻草人 :( - Nick T
1每个需要使用Python的用户都需要安装pyenv吗?如果我有3个用户都需要相同的Python 3.6版本,那么就需要编译3次,并且会占用3倍的磁盘空间吗?如果是这样的话,那真是太糟糕了...:/ - Display Name
1默认情况下(如果您使用pyenv-installer),它是一个用户安装,但没有什么阻止您将其安装到/opt或其他位置,并在/bin中添加一些符号链接。我发现它仅限于用户非常有用;用户不需要sudo(除了库)。磁盘空间很便宜。 - Nick T
"磁盘空间很便宜" - 在虚拟专用服务器上不一定如此 ;D - Display Name
我正在使用Windows上的Ubuntu来做这个。我想运行一个Python程序,但作者在代码中硬编码了Linux路径。-_- - beppe9000
安装Git也是必需的,否则在运行安装脚本时会出现pyenv: Git is not installed, can't continue.错误提示。 - virtualxtc
@beppe9000 我在Windows子系统中使用pyenv(在Windows上的bash,bash.exe等)没有任何问题;你运行了哪些命令? - Nick T
@NickT 我早就解决了那个问题。我的问题是脚本作者在他们的应用程序中硬编码了一些路径,假设它将在Linux上运行。解决方案是使用WSL,因为我不想修改脚本。 - beppe9000
@beppe9000 啊,我以为你是说pyenv已经将它们硬编码了。我认为pyenv只能在shell中使用,所以你需要在WSL或者可能是Cygwin(?)中使用。如果他们正在使用shabangs,你可以建议他们将#!/usr/bin/python的脚本改为#!/usr/bin/env python - Nick T
尝试在14.04中以这种方式安装3.7.0,但不知何故遇到了一个openssl问题,尽管已经安装了openssl和库。 - monkut
@monkut 可能是版本问题吗?你解决了吗?否则我可以试试。不过,14.04 还会得到任何更新吗? - Nick T
是的,我想可能是这样。我还没有找到解决办法。这是一个相当特殊的情况,我正在尝试在CircleCI的机器执行器中运行Python 3.7,但出现了一些问题,因为它似乎在运行Ubuntu 14.04。 - monkut

这取决于您使用的Ubuntu版本。
Ubuntu 16.10和Ubuntu 17.04
由于Python 3.6已安装在Ubuntu 16.10和Ubuntu 17.04的宇宙存储库中,您可以直接从存储库安装Python 3.6。只需使用以下命令:
sudo apt update
sudo apt install python3.6

Ubuntu 16.04

在Ubuntu 16.04上安装Python3.6有两种方法

  • 在Ubuntu 16.04上编译和安装Python 3.6
  • 从PPA在Ubuntu 16.04上安装Python 3.6

1. 在Ubuntu 16.04上编译和安装Python 3.6

安装必要的依赖项,下载Python 3.6源代码,构建环境并进行安装

sudo apt install build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
tar xvf Python-3.6.0.tar.xz
cd Python-3.6.0/
./configure
sudo make altinstall

2. 在Ubuntu 16.04上从PPA安装Python 3.6

您可以使用以下命令从PPA安装Python 3.6。

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.6

如果Python 3.6已经正确安装,你可以在终端中运行python3.6来调用Python解释器。
希望这能帮到你。如果遇到任何问题,你可以查看这篇博文here

4这基本上是接受答案的复制。你的回答有何附加值? - Marc Vanhoomissen
2在Ubuntu 16.04中的第一步是为那些出于某种原因想要编译和安装Python 3.6的人准备的。在Ubuntu 16.04上编译和安装Python 3.6的过程在被接受的答案或者任何其他回答中都没有提供。其他要点是明确Ubuntu的版本以及它与其他被接受的答案的区别。 - Aryal Bibek
1PPA在16.04(Mint)上的安装似乎存在问题。从源代码进行安装的信息非常有用。 - demented hedgehog
选项2 sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt install python3.6 在我的Ubuntu 20.04上运行成功。 - user677955
感谢您提供的Python 3.6指南,对您表示赞赏! - Vijay Kumar Kanta

如果你找不到可用的存储库,另一种选择是尝试从源代码进行编译。你可以在下载页面上找到源代码。然后下载并解压tarball;例如Python-3.6.1.tgz
解压tgz文件的过程如下:
tar -xvzf /path/to/yourfile.tgz

一旦你进入文件路径,解压缩文件到该路径后,运行以下命令:
./configure
make
make altinstall

希望这样能解决你的问题。

4问题说:“最好不要自己建立”,如果可能的话,最好使用“apt”路线。 - TheWanderer
好的,我会帮你看看是否能找到其他的软件源。你有没有机会自己在谷歌上寻找替代的软件源?我不想给你提出已经尝试过的建议。 - Just In Time Berlake
我不是楼主。只是提个建议。我找不到适用于3.6版本的PPA,所以可能需要自行构建。不过你应该在回答中提及这一点。 - TheWanderer
1如果用户从未在系统上构建过任何东西,那么您的构建命令将失败,因为有许多所需的软件包。"sudo apt install build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev" - Joe
同意@Joe的观点。在安装Python之前,请确保还安装了此处提到的软件包(https://stackoverflow.com/a/49696062/6907424),否则使用这个`Python`版本,您将无法使用`pip`,可能还会出现其他问题。对我来说,按照上述链接中的说明安装软件包就足够了。但是根据我的使用情况,我后来需要升级`pip`。 - hafiz031
@hafiy 你也可以直接使用上面提到的软件包 - Cadoiz

你最好的选择是升级到Ubuntu 20.04,然后从deadsnakes PPA安装它。
sudo add-apt-repository ppa:deadsnakes/ppa 
sudo apt install python3.6

否则,你可以尝试在不受支持的Ubuntu版本上安装deadsnakes PPA。他们只支持Ubuntu的长期支持(LTS)版本,而19.04和19.10不是(但Ubuntu 20.04是)。我记得在Github上看到过有人讨论这个问题的帖子https://github.com/deadsnakes/issues/issues?q=is%3Aissue+is%3Aclosed,但现在找不到了。
此外,你还可以查看关于下载deb包的答案https://stackoverflow.com/a/55858634/3064538
但如果你无法完成以上任何一项,那么最后的办法就是从源代码编译,首先需要安装C编译器。
sudo apt install gcc

然后前往https://www.python.org/downloads/,找到最新的3.6微版本(我写这篇文章时是3.6.10),并从源代码编译它。
wget -P ~/Downloads https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz
cd ~/Downloads
tar -xJf Python-3.6.10.tar.xz
cd Python-3.6.10

然后

./configure
make
make test
sudo make altinstall

最后一个命令使用altinstall而不是install,这样3.6版本将被安装为python3.6pip3.6。如果你将最后一个命令改为sudo make install(去掉alt),那么它将以python3的形式安装,这将覆盖你现在已安装的Python 3.7版本(以及pip)。
更新留给读者自行操作。

谢谢。我猜如果我已经安装了3.6版本,这个方法就不会起作用了对吗?我现在有3.6.9版本,当我运行python3.6时,版本号还是显示为3.6.9。 - user3494047
你是怎么安装3.6.9的?我猜在运行"make altinstall"之前,你得先删除which python3.6which pip3.6返回的任何文件。 - user677955

对于Ubuntu 15.10,我成功地使用以下方法进行了安装:

sudo add-apt-repository ppa:jonathonf/python-3.6

但是我编辑了这个文件。
sudo vi /etc/apt/sources.list.d/jonathonf-ubuntu-python-3_6-wily.list

我把“狡猾的”改成了“可靠的”,然后:
sudo apt-get update
sudo apt-get install python3.6

14Ubuntu 15.10?它在几个月前已经过期了。是时候升级了。 - edwinksl
"PPA 描述: 这个 PPA 已被取消公共访问 [...]" - user677955

也许建议使用Conda并不是一个坏主意。我认为这至少比使用pyenv更容易。但或许确实取决于您最终打算用Python做什么,因为我觉得使用Conda可能会带来一些额外的包。
编辑:值得一提的是,在安装了Conda的默认版本Python之后,您可以使用conda安装所需的版本,例如3.6。
conda install python==3.6


首先,按照其他答案的建议安装Python 3.6或3.7。如果想通过pip 安装PyPi包,例如 OpenEXR,可能会遇到一些错误。其中的一些错误(例如对于OpenEXR的PyPi包)可能会通过安装新安装的Python的Python开发包来解决。可以使用以下方法完成此操作:

sudo apt-get install python3.6-dev

或者

sudo apt-get install python3.7-dev