代码之家  ›  专栏  ›  技术社区  ›  JPFrancoia

“virtualenv”中的库比系统库大得多

  •  4
  • JPFrancoia  · 技术社区  · 8 年前

    我通过pew使用virtualenv(我认为这是一个很棒的工具),但我注意到了一些奇怪的东西。

    我安装了scipy系统端:

        7,7 MiB [##########] /sparse
        5,1 MiB [######    ] /special
        5,1 MiB [######    ] /stats
        5,0 MiB [######    ] /linalg
        3,5 MiB [####      ] /spatial
        3,0 MiB [###       ] /optimize
        2,5 MiB [###       ] /signal
        2,3 MiB [###       ] /interpolate
        2,3 MiB [##        ] /misc
        2,2 MiB [##        ] /io
        1,5 MiB [##        ] /integrate
        1,3 MiB [#         ] /ndimage
        1,0 MiB [#         ] /fftpack
      744,0 KiB [          ] /cluster
      512,0 KiB [          ] /odr
      464,0 KiB [          ] /constants
      252,0 KiB [          ] /_lib
       44,0 KiB [          ] /_build_utils
       36,0 KiB [          ] /__pycache__
       24,0 KiB [          ]  HACKING.rst.txt
       12,0 KiB [          ]  THANKS.txt
        8,0 KiB [          ]  INSTALL.rst.txt
        4,0 KiB [          ]  __init__.py
        4,0 KiB [          ]  __config__.py
        4,0 KiB [          ]  LICENSE.txt
        4,0 KiB [          ]  setup.py
        4,0 KiB [          ]  BENTO_BUILD.txt
        4,0 KiB [          ]  version.py
        4,0 KiB [          ]  linalg.pxd
    

    这是scipy virtualenv侧面安装的(同一scipy版本):

    51,0 MiB [##########] /sparse
       37,6 MiB [#######   ] /.libs
       12,9 MiB [##        ] /linalg
       10,6 MiB [##        ] /spatial
        9,7 MiB [#         ] /special
        6,0 MiB [#         ] /interpolate
        5,9 MiB [#         ] /stats
        5,1 MiB [#         ] /optimize
        4,2 MiB [          ] /signal
        3,2 MiB [          ] /io
        3,0 MiB [          ] /integrate
        3,0 MiB [          ] /ndimage
        2,3 MiB [          ] /misc
        2,1 MiB [          ] /cluster
        1,7 MiB [          ] /fftpack
      884,0 KiB [          ] /odr
      328,0 KiB [          ] /constants
      204,0 KiB [          ] /_lib
       32,0 KiB [          ] /_build_utils
       24,0 KiB [          ]  HACKING.rst.txt
       20,0 KiB [          ] /__pycache__
       12,0 KiB [          ]  THANKS.txt
        8,0 KiB [          ]  INSTALL.rst.txt
        4,0 KiB [          ]  __init__.py
        4,0 KiB [          ]  LICENSE.txt
        4,0 KiB [          ]  setup.py
        4,0 KiB [          ]  __config__.py
        4,0 KiB [          ]  BENTO_BUILD.txt
        4,0 KiB [          ]  version.py
        4,0 KiB [          ]  pip-delete-this-directory.txt
        4,0 KiB [          ]  linalg.pxd
    

    不用说,这里有巨大的尺寸差异。这通常不会给我带来太多麻烦,但我正在尝试将一个可执行文件与pyinstaller捆绑在一起,结果得到的可执行文件实在太大了。

    有人能解释这种差异吗?它不是scipy特有的,我也认为它是numpy的,也许是其他库的。

    编辑:

    这个 文件夹 目录中的大小不同:

    系统范围:

    3,1 MiB [##########]  _sparsetools.cpython-35m-x86_64-linux-gnu.so
    

    38,5 MiB [##########]  _sparsetools.cpython-35m-x86_64-linux-gnu.so
    
    1 回复  |  直到 8 年前
        1
  •  5
  •   Blender    8 年前

    为Scipy分发的Python轮子中的共享库文件没有被剥离,因此它们比包管理器安装的要大:

    $ file _sparsetools.cpython-35m-x86_64-linux-gnu.so
    _sparsetools.cpython-35m-x86_64-linux-gnu.so: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=ed7b8e00c558f234620423315fa9b53274393e72, not stripped
    $ du -h _sparsetools.cpython-35m-x86_64-linux-gnu.so
    39M     _sparsetools.cpython-35m-x86_64-linux-gnu.so
    

    如果你 strip it ,文件大小缩小:

    $ strip _sparsetools.cpython-35m-x86_64-linux-gnu.so
    $ file _sparsetools.cpython-35m-x86_64-linux-gnu.so
    _sparsetools.cpython-35m-x86_64-linux-gnu.so: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=ed7b8e00c558f234620423315fa9b53274393e72, stripped
    $ du -h _sparsetools.cpython-35m-x86_64-linux-gnu.so
    3.7M    _sparsetools.cpython-35m-x86_64-linux-gnu.so
    

    --strip flag .