我想安装最新的Python,本文撰写时为3.6。但是,该存储库表示Python 3.4.2是最新版本。

我已经尝试过:

 $ sudo apt-get update
$ sudo apt-get install python3

python3 is already the newest version.

$ python -V

Python 3.4.2
 


要在Windows工作站上升级到Python 3.6,我只需下载一个exe,单击“下一步”几次,就可以了。在Debian Jessie上安装Python 3.6的正确且正式接受的过程是什么?

评论

默认的Debian存储库包含专门为某个Debian版本编译的软件包。除了安全更新(最好是修复安全漏洞所需的最少更改)之外,大多数软件的新版本可能要等到下一个主要发行版才可用,以避免潜在的不稳定。

@phk在这种情况下,采用类似于pip的行为(在未指定版本的情况下默认为3.4.2)并允许用户使用标志显式请求3.6是明智的做法吗?只是一个想法:)

这意味着Debian员工必须为每个受支持的Debian版本维护所有这些Python版本。当然,它可以自动化,但仍然很多。同样,想要较新版本的高级用户也可以使用自定义存储库。有时,软件作者自己会为Debian和其他流行的Linux发行版(例如Windows 2000)维护它们。对于Oracle VirtualBox。

Python 3.6(尽管是rc1)刚进入Debian实验版。可能需要稍作调整,便可以将其移植到Jessie。

更新。这对我来说在Debian稳定版(jessie)上成功完成了建设。但是,这并不意味着它将成功安装并且不会引起问题。合理的下一步是在稳定的测试VM上对其进行测试。有人在乎吗?

#1 楼

编者注:警告:此答案显示了如何从Debian的未来版本中安装Python。这将导致一个混合Debian版本的系统,并且影响范围将远超过Python-在大多数情况下,应用这些指令也将引入较新的库。对于已更新的程序包,无法以预期的速度从安全更新中获得最终的设置。这就是FrankenDebian。

反而考虑此问题的其他答案,尤其是这个问题展示了如何从源代码进行构建,而这个问题展示了如何使用虚拟环境。


Debian的存储库中没有Python 3.6,但是经过测试就可以了。

$ sudo nano /etc/apt/sources.list
# add
deb http://ftp.de.debian.org/debian testing main
$ echo 'APT::Default-Release "stable";' | sudo tee -a /etc/apt/apt.conf.d/00local
$ sudo apt-get update
$ sudo apt-get -t testing install python3.6
$ python3.6 -V


您要求的是:


正确且被正式接受的程序


>但我必须指出,这不是官方解决方案,因为它使用测试存储库。

评论


请勿尝试-撤消操作会花费很多时间

–user3728501
17年12月16日在17:23

这样做仍然像2017年8月(或12月)所建议的那样冒险吗? @cas编辑并发表评论后,现在还不清楚。有人可以跟进吗?

–布赖恩·彼得森(Brian Peterson)
18年6月11日在16:52



截至2018年9月15日,它仍然存在风险:我在具有Debian拉伸能力的Raspberry Pi上尝试了此操作,并在从测试中将Python 3.6升级升级到更新的libc6和libc6-dev后遇到了分段错误。

–drott
18-09-15在7:28

2019年4月,仍然是“ BadIdea®©™”,昨天我这样做了,我应该担心一堆被删除的软件包,系统陷入混乱,重新启动后我再也没有X了,我没有尝试修复它,而是安装了Ubuntu。

–滑稽
19-4-9在11:02



请删除此危险答案

–丹尼尔·W。
19年5月9日在13:30

#2 楼

您可以按以下方式在Debian 8上安装Python-3.6

wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar xvf Python-3.6.9.tgz
cd Python-3.6.9
./configure --enable-optimizations --enable-shared
make -j8
sudo make altinstall
python3.6


建议根据官方网站使用make altinstall

如果需要要包含pip,您需要将--with-ensurepip=install添加到您的配置调用中。有关更多详细信息,请参见./configure --help


警告:make install可以覆盖或伪装python二进制文件。因此建议使用make altinstall而不是make install,因为它仅安装exec_prefix/bin/pythonversion


需要安装一些软件包以避免某些已知的问题,请参阅:常见的构建问题(已更新)


Ubuntu / Debian:


sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev



libreadline-dev的替代方法:


sudo apt install libedit-dev



Fedora / CentOS / RHEL(aws ec2):


sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel \
openssl-devel xz xz-devel libffi-devel



openssl-devel的替代方法:


sudo yum install compat-openssl10-devel --allowerasing


更新

您可以从此处下载最新的python-x.y.z.tar.gz

要设置默认的python版本并在它们之间轻松切换,您需要使用多个python版本更新您的update-alternatives

假设您已在debian Stretch上安装了python3.7,请使用命令whereis python查找二进制文件(*/bin/python)。 e,g:

/usr/local/bin/python3.7
/usr/bin/python2.7
/usr/bin/python3.5


添加python版本:

update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 50
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 40
update-alternatives --install /usr/bin/python python /usr/bin/python3.5 30


优先级为python3.750为现在是您的默认python,python -V将打印:

Python 3.7.0b2


要在它们之间切换,请使用:

update-alternatives --config python


样品输出:

There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                      Priority   Status
------------------------------------------------------------
* 0            /usr/local/bin/python3.7   50        auto mode
  1            /usr/bin/python2.7         40        manual mode
  2            /usr/bin/python3.5         30        manual mode
  3            /usr/local/bin/python3.7   50        manual mode

Press <enter> to keep the current choice[*], or type selection number: 


评论


Debian伙计们不建议使用checkinstall吗?否则,将其安装到/ usr / local或/ opt将是明智的。

–伊万·阿尼舍克(Ivan Anishchuk)
17年1月16日在22:07

根据./configure --help,默认情况下,Python 3.6安装到/ usr / local。

– Markus Strauss
17年5月4日在21:03



对此答案有疑问(例如SSL模块不可用或zlib丢失)?请参阅:stackoverflow.com/a/41601137/972128

–kkurian
17年1月1日于16:42

免责声明:在Pi 0等低功耗设备上,这需要20多个小时。

– AntoineLizée
17年7月12日在7:06



3.7版已发布

– Timo
18年3月31日在15:25

#3 楼

官方建议是“您实际上不需要更新的软件”

不要患有“闪亮的新东西综合症”-DontBreakDebian | Debian Wiki

该页面上的大多数建议旨在解决如果希望该软件在整个系统范围内都可用的情况,但是在这种情况下,我认为这不是必需的。 >
如果获取python源代码,请使用--prefix构建3.6解释器以控制其最终位置,然后将virtualenv--python选项一起使用,然后可以使用python 3.6而不会影响项目外的任何内容。

该过程可能如下所示:

$ cd ~
$ mkdir pythonroot
$ mkdir opt
$ mkdir app
$ cd opt
$ wget <python tarball>
$ tar -xvf <python tarball>
$ cd python-3.6
$ ./configure --prefix="$HOME"/pythonroot
$ make
$ make install
$ cd ~
$ cd app
$ virtualenv venv --python ~/pythonroot/bin/python
$ . venv/bin/activate
[venv]$ which python
/home/<user>/pythonroot/bin/python


如果要执行此操作,则可能需要考虑Python中的--enable-optimizations标志configure脚本,它似乎启用了一些功能,例如配置文件引导的优化。它会增加构建时间,但根据某些基准,似乎可以使解释器的速度提高10%左右。

评论


这遵循“实用性胜过纯度”的一般Python规则。我倾向于从/opt/python-x.y.z中的源包安装python,然后从其自己的virtualenvs运行应用程序。

– zgoda
17年6月30日在10:40

重要说明:如果您要执行以下操作:确保Python进程运行的任何用户都不能修改virtualenv

–格雷戈里·尼贝特(Gregory Nisbet)
17年8月7日在16:53

我认为这是最好的答案。

–BringBackCommodore64
18年4月11日在17:05

感谢您的建议。过去,我使用系统范围的插件破坏了一些debian安装。

–已冻结
19年2月11日在14:27

在我的安装[venv] $中,哪个python没有给我/ home / <用户> / pythonroot / bin / python,而是/ home / <用户> / app / venv / bin / python3 ...为什么?

–已冻结
19年2月11日在15:01

#4 楼

您可能想看看pyenv:https://github.com/yyuu/pyenv。引用Amaral Lab的pyenv教程中的内容:


pyenv可让您更改全局Python版本,安装多个Python版本,设置目录
(项目)特定的Python版本,并且可以创建/管理虚拟python环境(“ virtualenvs”)。所有这些操作都是在* NIX样式的
机器(Linux和OS X)上完成的,而无需依赖Python本身,并且它
在用户级别起作用–不需要任何sudo命令。


评论


虽然此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。 -来自评论

–炼金术士
16 Dec 25'在10:36

您是对的,将更改答案。

–柴巴
16 Dec 25'在10:40

我认为他的意思是也要包括基本命令行。

–not2qubit
17 Mar 24 '17在23:40

这很有效,除非您要处理嵌入式设备。要“安装” python版本,请在本地下载并编译源代码。除此之外,pyenv是一个不错的选择,并且具有很大的灵活性,包括在不同目录中运行不同的python版本,以及处理非常烦人的PIP问题。

–布赖恩·博尔科夫斯基(Brian Bulkowski)
17年4月16日在6:29

pyenv给我的印象不多。它的正式安装过程是“将此脚本捕获到外壳”,该脚本使用git并克隆未标记的代码,然后从头开始构建python(因此也需要编译器)。 ¯_(ツ)_ /¯

– jrg
20-05-26在10:47

#5 楼

我的首选方法是使用Anaconda或Miniconda来将最新版本的python和软件包保留在Debian上。

它们整齐地保存在一个文件夹中,以便以后根据需要轻松删除。安装程序还将路径添加到您的bashrc中(如果使用其他Shell,则将其自己添加)。

它带有pip,还有conda,它是另一个程序包管理器,对于numpy之类的更复杂的功能而言,它可能是不错的选择。 Miniconda是一个简单的安装,Anaconda是一个完整安装,其中包含许多软件包,主要用于数据分析。

快速:

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh


如果您不使用bash,请阅读并接受许可,添加路径:export PATH="/home/$USER/miniconda3/bin:$PATH"

测试:

$ python --version
Python 3.6.0 :: Continuum Analytics, Inc.


从PyPi安装:

# pip install fava


从conda安装:

# conda install numpy


要删除它,请删除文件夹~/miniconda3和其中的路径您的bashrc。

评论


在从源代码安装python遇到无尽的问题之后,此版本非常完美!请注意,如果要使用virtualenv(wrapper)进行环境管理,则需要将miniconda库目录添加到LD_LIBRARY_PATH。例如:将export $ LD_LIBRARY_PATH =“ $ LD_LIBRARY_PATH:$ HOME / miniconda3 / lib”添加到您的.bashrc中。

– jrast
17年8月11日在23:38

“安装程序还将路径添加到您的bashrc中”。这就是为什么我不使用anaconda的主要原因。至少可以说,无声地掩盖现有的python环境是不健康的。

–宫城先生
17年8月28日在6:59

#6 楼

Debian的存储库中没有Python 3.6。以下是当前Python3状态的快照:

wheezy (oldstable) (python): interactive high-level object-oriented language (default python3 version)
    3.2.3-6: all
jessie (stable) (python): interactive high-level object-oriented language (default python3 version)
    3.4.2-2: amd64 arm64 armel armhf i386 mips mipsel powerpc ppc64el s390x
stretch (testing) (python): interactive high-level object-oriented language (default python3 version)
    3.5.1-4: amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x
sid (unstable) (python): interactive high-level object-oriented language (default python3 version)
    3.5.1-4: alpha amd64 arm64 armel armhf hppa hurd-i386 i386 kfreebsd-amd64 kfreebsd-i386 m68k mips mips64el mipsel powerpc powerpcspe ppc64 ppc64el s390x sh4 sparc64 x32


您可以在此处查看这些信息。

您可以从源代码安装3.6,也可以从源代码安装3.6。使用Linuxbrew之类的东西进行主目录安装。

#7 楼

Python 3.6(尽管是rc1)刚在Debian实验版中出现。我能够在Debian稳定版(jessie)上成功构建此版本。请参阅下面粘贴的构建的最终步骤。

但是,这并不意味着它将成功安装并且不会引起问题。合理的下一步是在稳定的测试VM上对其进行测试。如果有人在乎,我可以试试看-或其他人可以尝试。

适当的发行版本应该很快就会在Debian不稳定版中发布。

dh_builddeb -a
dpkg-deb: building package `python3.6' in `../python3.6_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `python3.6-venv' in `../python3.6-venv_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `libpython3.6-stdlib' in `../libpython3.6-stdlib_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `python3.6-minimal' in `../python3.6-minimal_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `libpython3.6-minimal' in `../libpython3.6-minimal_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `libpython3.6' in `../libpython3.6_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `python3.6-dev' in `../python3.6-dev_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `libpython3.6-dev' in `../libpython3.6-dev_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `python3.6-dbg' in `../python3.6-dbg_3.6.0~rc1-1_amd64.deb'.
dpkg-deb: building package `libpython3.6-dbg' in `../libpython3.6-dbg_3.6.0~rc1-1_amd64.deb'.
 dpkg-genchanges  >../python3.6_3.6.0~rc1-1_amd64.changes
dpkg-genchanges: including full source code in upload
 dpkg-source --after-build python3.6-3.6.0~rc1
dpkg-buildpackage: full upload (original source is included)
Now running lintian...
W: python3.6 source: newer-standards-version 3.9.8 (current is 3.9.6)
N: 56 tags overridden (26 errors, 27 warnings, 3 info)
Finished running lintian.


#8 楼

使用此

sudo echo "http://ftp.fr.debian.org/debian testing main" >> /etc/apt/sources.list

sudo apt-get update
sudo apt-get install -y python3.6


成功运行。

更多:将python3.6设置为默认值

sudo alias python=/usr/bin/python3.6


现在::

python --version
Python 3.6


评论


应该阅读sudo echo“ deb http://ftp.fr.debian.org/debian测试主体” >> >> /etc/apt/sources.list

–偏角
18年9月28日在11:28

该答案与接受的答案相同,一年后才出现,但未能给出正确的命令。

– To마SE
19年1月16日在7:16

现在正在测试python3.7

– SergeanT
20年1月6日在9:36

#9 楼

截至2019年9月,最新的debian稳定版(buster)具有python 3.7。因此,正确且正式被接受的程序现在将是升级到debian buster。

评论


“升级python,先升级世界”。虽然这是一种解决方法,但并不能解决一个人的眼前问题。

– jrg
20-05-26在10:50

GAD3R的答案很好地涵盖了如何安装更高版本的python,而又不会像接受的答案那样使您的系统变砖。升级整个系统是我想到的唯一其他选择。这是一种非常不同的方法。

– TamaMcGlinn
20-05-26在11:46

有趣的是,“破坏系统”的答案目前似乎还没有让您这么做,这可能是由于Jessie进入档案库而导致的回购变更。但是,必须安装编译器和开发人员库也不总是一个人想走的路。

– jrg
20 May 27 '12:27