首页   注册   登录
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
Coding
V2EX  ›  Python

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

  •  
  •   Hopetree · 157 天前 · 4477 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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