V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Hopetree
V2EX  ›  Python

关于 Linux 系统自带的 python2.7 为啥不更换成 python3 的疑惑

  •  
  •   Hopetree ·
    Hopetree · 2019-07-11 17:41:15 +08:00 · 8090 次点击
    这是一个创建于 1995 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前发行的 linux 系统自带的 Python 都是 2.7 的版本(我直说常用的几个版本,据我所了解的),用 Python 的人都知道 Python2 和 Python3 有很多不一样的语法还有内置库,有的人还笑称这是两个不同的语言,正因为这个,所以在编写自动化脚本的时候,如果脚本是要在服务器上面执行(非虚拟环境),那么一定要兼容 Python2.

    据我所知,python2 作为 linux 内置的,所以很多其他软件对这个有依赖,所以一般服务器上面也不会把 Python2 升级成 Python3,而是单独下载 Python3 使用。

    重点:基于上述的现状,似乎说明 Python2 是不能够短时间被遗弃,这两个版本还是长期并存。但是我发现容器的 Python 镜像有不同版本的 linux 系统,比如 Ubuntu,centos,都是 Python3 作为基础 Python 版本,而非 Python2,所以问题来了:既然在容器里面可以丢掉 python2,为什么发行版的 linux 不可以(或者说没有这样做)?

    38 条回复    2019-07-12 17:51:35 +08:00
    nekoyaki
        1
    nekoyaki  
       2019-07-11 17:45:02 +08:00
    容器历史包袱小,依赖少。一般正经的用法,一个容器只会干一件事儿,也不会让用户去容器里改太多东西或者部署什么东西,出了问题是容器制作者的问题。
    但操作系统肯定不能这么做限制
    lolizeppelin
        2
    lolizeppelin  
       2019-07-11 17:56:42 +08:00
    因为你只看到 python 没升级
    长期支持版系统基础组件连小版本都不升级,只更新非常微小的 bug 修复版

    glibc gcc 什么的没一个升级的,python 升不了级因为 python 是系统的基础组件

    linux 系统不怎么和 java 打交道,随便升...老早就提供多版本并存工具,想用什么版用什么版

    1~2 年内红帽 8 普及,如果你们系统不考虑低级系统支持,可以抛弃 python2 了
    WingOnSummit
        3
    WingOnSummit  
       2019-07-11 17:58:06 +08:00 via iPhone
    centos7 开始好像就是 python3 了。ubuntu 现在的版本默认也是 3,以前用的一个版本,14 还是 16 来着,默认是 2,但是有 3,改下 link 文件就行。
    crella
        4
    crella  
       2019-07-11 18:01:44 +08:00 via Android
    perl6 脚本用 use v6;就可以解决问题
    lihongjie0209
        5
    lihongjie0209  
       2019-07-11 18:05:13 +08:00   ❤️ 1
    你把系统自带的 python 卸载掉就知道为什么不能升级了
    qq976739120
        6
    qq976739120  
       2019-07-11 18:07:00 +08:00
    很多乱七八糟的东西安装,都依赖 python2 的
    chaleaochexist
        7
    chaleaochexist  
       2019-07-11 18:08:55 +08:00
    @lihongjie0209 你真坏.
    blueskea
        8
    blueskea  
       2019-07-11 18:10:50 +08:00 via Android
    有些发行版 python2,3 都装了,只不过 python 命令还是链接到了 python2 上
    ChillyPrince
        9
    ChillyPrince  
       2019-07-11 18:11:37 +08:00   ❤️ 1
    上面除了 1 楼好像就没人看完正文的……人家明明纠结的是容器为啥能扔掉 python2
    Jirajine
        10
    Jirajine  
       2019-07-11 18:11:42 +08:00 via Android
    Arch 系够新吧,还没丢掉 Python2 呢。虽然一直在说要舍弃旧包。
    BingoXuan
        11
    BingoXuan  
       2019-07-11 18:16:51 +08:00
    macos 的 vim 还停留在 7.4 的版本。版本旧大多都是遗留问题。工程学经验告诉我们,如果一个东西没有坏,那就不要去动它
    skiy
        12
    skiy  
       2019-07-11 18:34:48 +08:00 via Android
    py3 在新发行版好像已经开始替换了
    BruceAuyeung
        13
    BruceAuyeung  
       2019-07-11 18:40:18 +08:00 via Android
    容器里的 os 都是精简过的,定位上也不是做大而全的系统,有它自己的目标市场,不能说容器里能丢掉那普通发行版也能丢掉,现象的本质不是能不能,而是应不应该
    janxin
        14
    janxin  
       2019-07-11 18:59:09 +08:00
    历史包袱,不一定非得兼容 python2,未来都会是 python3 默认,目前已有一部分最新版是默认 Python3 了。

    但是问题是 Linux 装一些软件的时候会把 Python2 再装回来...
    mainlong
        15
    mainlong  
       2019-07-11 19:31:36 +08:00
    Ubuntu18.04 是 python3 的,但是我安装其他软件就把 python2.7 也顺带着安装了
    mattx
        16
    mattx  
       2019-07-11 19:31:54 +08:00 via iPhone
    debian 10 就是 3 了
    Humorce
        17
    Humorce  
       2019-07-11 19:38:31 +08:00
    pip list -v
    看看就明白了。

    Ubuntu 18.04 内置的是 Python 3.6.8
    Tink
        18
    Tink  
       2019-07-11 19:42:24 +08:00 via iPhone
    有些版本升级了
    wlh233
        19
    wlh233  
       2019-07-11 20:19:14 +08:00
    就跟 32 位 和 64 位 一样,需要一个过程,每个发行版理念不同反应快慢不一样
    Archlinux 在 2010 年就默认 python3 了
    https://www.archlinux.org/news/python-is-now-python-3/
    reus
        20
    reus  
       2019-07-11 20:26:54 +08:00
    有依赖 python2 的,你就要提供 python2
    容器不依赖 python2,就可以不提供 python2
    reus
        21
    reus  
       2019-07-11 20:27:45 +08:00
    它们就是不同的语言,所以没有什么可以“更换”的,你能把 python 更换成 perl 吗?
    billlee
        22
    billlee  
       2019-07-11 21:46:54 +08:00
    你还可以发现容器里用不了 less, vi, man. 基础镜像是非常精简的,所以依赖就少了。
    Takamine
        23
    Takamine  
       2019-07-11 21:59:32 +08:00
    @lihongjie0209 2333,我干过然后发现 yum 什么也一起 GG 了。:doge:
    hoyixi
        24
    hoyixi  
       2019-07-11 22:01:03 +08:00
    道理很简单。Linux 各大厂商,主业是做服务器系统的,全世界已经存在的、正在运行的、不计其数的各种系统,依赖关系根本没法估计,只能向下兼容。

    比如你维护一条铁路,上面跑了各种火车,但是轨距都是 X,你可以各种维护和升级铁路设施,但是你不能改轨距,因为上面有好多火车,总不能为了你铁路升级,全部换(升级)火车吧~

    但是你要新建一条铁路,采用新轨距,简单多了。
    msg7086
        25
    msg7086  
       2019-07-11 22:15:52 +08:00
    你都说了 Python2 和 Python3 是两个语言了。
    他们现在就是两套独立的程序。
    所以他们是否被安装和使用也是独立的。
    ysn2233
        26
    ysn2233  
       2019-07-11 22:26:34 +08:00
    因为发行版不同,arch manjaro 早就默认 python3 了
    Hopetree
        27
    Hopetree  
    OP
       2019-07-11 23:36:47 +08:00
    @ChillyPrince 的确,很多人连我想表达的观点都没读懂,感觉现在很多人在回复别人抛出的问题的时候都喜欢先入为主,根本不去看别人想表达的意思
    nexply1920
        28
    nexply1920  
       2019-07-12 00:32:28 +08:00
    你看看各发行版最新的版本,已经开始更换 python3 系列了
    gavindexu
        29
    gavindexu  
       2019-07-12 00:33:48 +08:00 via iPhone
    @WingOnSummit minimal 还是 2.7
    mrcn
        30
    mrcn  
       2019-07-12 01:39:35 +08:00 via Android
    linux 的依赖关系太复杂了,普通发行版不是想换就换的。就算默认 py3,随便装点东西就又会装 2。容器不同,里面会装哪些东西是确定的。
    ouqihang
        31
    ouqihang  
       2019-07-12 07:18:26 +08:00
    树莓派,官方系统。之前手贱把 bin 里面 python 改到了 python3,某次更新系统,configparser 因为 python2 python3 里面名称不同,当时就更新失败了(但流程走了一半),重启后系统直接挂了。鬼知道还有哪些重要的程序依赖 python2。
    wnpllrzodiac
        32
    wnpllrzodiac  
       2019-07-12 08:21:22 +08:00 via Android
    你的系统 too old 了吧,新系统都是与时俱进的
    k9982874
        33
    k9982874  
       2019-07-12 08:43:08 +08:00
    @Jirajine #10 arch 新版已经去掉 py2.7
    liuxey
        34
    liuxey  
       2019-07-12 08:46:58 +08:00
    以现在发行版的复杂度,py2 一改就废
    www5070504
        35
    www5070504  
       2019-07-12 11:54:11 +08:00
    yum 对 python2 有依赖
    lxmmmm
        36
    lxmmmm  
       2019-07-12 14:52:49 +08:00
    新一点的 Linux 发行版 有把 python2 去掉的,比如 Ubuntu 自 18.04 起就默认 python3 了;
    另外,系统默认的 python 版本最好不要动。别说把默认的 python2 改成 python3 了,就算是默认的 python3.6 改成 python3.7 都会有各种莫名奇妙的问题。反正 python 本身就可以多个版本共存的,再装一个就是
    necomancer
        37
    necomancer  
       2019-07-12 17:09:15 +08:00
    arch 默认 python->python3,所有依赖 python2 的包会自动指向 python2
    lolizeppelin
        38
    lolizeppelin  
       2019-07-12 17:51:35 +08:00
    @ChillyPrince

    还不是一个道理,容器里的系统是个精简的系统,就一些 glibc 之类的最基础的组件,没有 python 依赖,你用 py2.4 都可以

    正常系统里有大量 python 依赖所以不能升级
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5300 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:23 · PVG 09:23 · LAX 17:23 · JFK 20:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.