V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
autumn2018
V2EX  ›  程序员

为什么 python3.6 的动态链接库比 python2.7 的可执行文件大了很多?

  •  
  •   autumn2018 · 2018-12-07 09:22:21 +08:00 · 2542 次点击
    这是一个创建于 2210 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的机器是 ubuntu 16.04LTS, python2.7 和 python3.6 都是 apt-get 安装的.

    python2.7 的可执行文件的体积是 3.4M :

    bash-4.3$ ls -lh `which python2.7`
    -rwxr-xr-x 1 root root 3.4M Nov 13 03:46 /usr/bin/python2.7
    

    python3.6 的可执行文件只有 18kb,它是动态链接的,python3.6 的动态链接库的大小是 12M:

    bash-4.3$ ls -lh `which python3.6`
    -rwxr-xr-x 2 root root 18K May  5  2018 /usr/local/bin/python3.6
    
    bash-4.3$ ls -lh /usr/local/lib/libpython3.6m.so.1.0
    -r-xr-xr-x 1 root root 12M May  5  2018 /usr/local/lib/libpython3.6m.so.1.0
    

    请问为什么 python3.6 的动态链接库这么大?比 2.7 的可执行文件还大了这么多?这里面都是什么?

    最后补充一些无关信息,供大家参考: 我用pmap检查了 python3.6 启动后的地址空间,libpython3.6m.so.1.0 在其中只占据了大概 5M 的的地址空间(2668k + 2044k + 408k):

    00007f15ce7c5000    2668 r-x-- 0000000000000000 008:00001 libpython3.6m.so.1.0
    00007f15cea60000    2044 ----- 000000000029b000 008:00001 libpython3.6m.so.1.0
    00007f15cec5f000      12 r---- 000000000029a000 008:00001 libpython3.6m.so.1.0
    00007f15cec62000     408 rw--- 000000000029d000 008:00001 libpython3.6m.so.1.0
    

    两个版本的 python 运行起来之后,pmap -d的汇总结果分别是:

    3.6 版本:
    mapped: 24496K    writeable/private: 3424K    shared: 28K
    
    2.7 版本:
    mapped: 31284K    writeable/private: 3276K    shared: 28K
    

    可见 python3.6 的虚存占用反而小一点儿(24496 <3 1284),我试着找了下原因(现在已经跑题了),对比两个版本被pamp的输出(这儿就不贴出来了,太长了),发现 python3.6 的地址空间里找不到 2.7 里原有的两个系统动态库了,分别是:libreadline 和 libtinfo .

    第 1 条附言  ·  2018-12-08 01:33:25 +08:00
    我现在好像想起来了,那个 3.6 的动态库是我自己编译的可能.
    抱歉耽误大家时间了.
    逃 ~
    7 条回复    2018-12-08 01:31:35 +08:00
    likuku
        1
    likuku  
       2018-12-07 09:33:29 +08:00 via iPhone
    2.x 的支持也没几年了… 没必要纠结这个了

    如今手机内存都可以随便到 4GB 了,这点差别无所谓
    autumn2018
        2
    autumn2018  
    OP
       2018-12-07 09:37:21 +08:00
    @likuku 只是单纯的好奇,在 google 上找不到答案,想知道 2=>3 的升级,怎么变化这么大.
    reself
        3
    reself  
       2018-12-07 11:20:43 +08:00 via Android
    @autumn2018 python 是世界上最好的两种语言(滑稽
    abmin521
        4
    abmin521  
       2018-12-07 13:19:22 +08:00
    root@ubuntu:~# du -sh /usr/bin/python2.7
    3.4M /usr/bin/python2.7
    root@ubuntu:~# du -sh /usr/bin/python3.5
    4.3M /usr/bin/python3.5
    westoy
        5
    westoy  
       2018-12-07 13:23:51 +08:00   ❤️ 1
    我这边 apt 装的 python3.6 是 4.4M....

    而且官方包不可能放 /usr/local 下面啊, 你确定不是自己编译的?
    shyling
        6
    shyling  
       2018-12-07 13:51:29 +08:00
    都是 2 个语言了还要比较 vm 的文件的大小?
    autumn2018
        7
    autumn2018  
    OP
       2018-12-08 01:31:35 +08:00
    @westoy 太谢谢你了,好像真是我自己编译的,突然想起来了...谢谢你.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3091 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:27 · PVG 21:27 · LAX 05:27 · JFK 08:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.