为什么 python3.6 的动态链接库比 python2.7 的可执行文件大了很多? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
autumn2018
V2EX    程序员

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

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

    我的机器是 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     Solana     5657 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 02:41 PVG 10:41 LAX 18:41 JFK 21:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86