首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

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

  •  
  •   Hopetree · 9 天前 · 3477 次点击

    目前发行的 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
        1
    nekoyaki   9 天前
    容器历史包袱小,依赖少。一般正经的用法,一个容器只会干一件事儿,也不会让用户去容器里改太多东西或者部署什么东西,出了问题是容器制作者的问题。
    但操作系统肯定不能这么做限制
        2
    lolizeppelin   9 天前
    因为你只看到 python 没升级
    长期支持版系统基础组件连小版本都不升级,只更新非常微小的 bug 修复版

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

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

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

    但是问题是 Linux 装一些软件的时候会把 Python2 再装回来...
        15
    mainlong   9 天前
    Ubuntu18.04 是 python3 的,但是我安装其他软件就把 python2.7 也顺带着安装了
        16
    mattx   9 天前 via iPhone
    debian 10 就是 3 了
        17
    Humorce   9 天前
    pip list -v
    看看就明白了。

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

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

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

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

    正常系统里有大量 python 依赖所以不能升级
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2167 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 82ms · UTC 13:25 · PVG 21:25 · LAX 06:25 · JFK 09:25
    ♥ Do have faith in what you're doing.