V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
cfwyy
V2EX  ›  Python

请教: 不同 Python 环境下, pyinstaller 打包后的文件大小会有巨大差别?!

  •  
  •   cfwyy · 2018-07-30 09:06:20 +08:00 · 7020 次点击
    这是一个创建于 2309 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟新手,对于 pyinstaller 打包的原理不是非常清楚,最近写了个操作 excel 的小脚本,需要打包分发。
    我的机器 A 上,环境是 python3.6 的官方包,用 pyinstaller 打包成的 dist 目录是 约 19M 大小,可以接受。
    但是在机器 B 上,环境是 anaconda3, 一样的脚本,用 pyinstaller 打包成的 dist 目录是 700 多 M !吓死人了- -
    机器 B 下 700M 的 dist 目录里占用最多的是一堆 mkl_开头的 dll,不认识不知道是什么鬼- - 如 mkl_core.dll ,mkl_avx2.dll 这些就 500 多 M 了,
    还有 pyqt 的一些,这些我都用不到的啊,为什么要给我打进去?

    pyinstaller 打包命令用的都是一样的命令,都未加任何选项。pyinstaller test.py

    test.py 里导入的包有:
    import re
    import xlwings as xw
    import string
    import sys
    import os.path

    都只有一个 xlwings 第三方模块。

    求大神 科普一下。不胜感激!
    12 条回复    2018-07-30 14:32:46 +08:00
    huangzhe8263
        1
    huangzhe8263  
       2018-07-30 09:30:16 +08:00   ❤️ 1
    一般建议在 virtualenv 下打包,只导入需要的模块即可
    huangzhe8263
        2
    huangzhe8263  
       2018-07-30 09:32:42 +08:00
    以及最后生成导出的话都会加个参数 -F , 这样只会生成一个二进制文件在 dist 目录下
    cfwyy
        3
    cfwyy  
    OP
       2018-07-30 09:37:56 +08:00
    @huangzhe8263 谢谢! virtualenv 下次再好好研究研究。
    能否科普一下打包的原理吗?为什么直接在 anaconda 的环境下,这么多东西会打包进去?
    cfwyy
        4
    cfwyy  
    OP
       2018-07-30 09:41:17 +08:00
    -F 生成单个文件 这个我知道 不过 就算这样 单个文件也有近 300M。而且单个文件启动会慢一点。
    greatx
        5
    greatx  
       2018-07-30 09:44:09 +08:00
    mkl 库 一般用于 numpy 之类的科学计算环境
    huangzhe8263
        6
    huangzhe8263  
       2018-07-30 09:46:12 +08:00
    估计是 anaconda 链接了不少不需要的库和包吧
    可以用 pyinstaller options script.spec 查看下依赖项
    huangzhe8263
        7
    huangzhe8263  
       2018-07-30 09:47:57 +08:00
    嗯对是会慢, 我那脚本跑起来就一直运行了到没太注意...
    YuuuZeee
        8
    YuuuZeee  
       2018-07-30 09:48:30 +08:00 via Android
    环境还是 docker 控制下比较清真…
    sikariba
        9
    sikariba  
       2018-07-30 09:48:42 +08:00
    我前段时间也在 conda 下打包过一次,而且还 import 了 pandas 这种巨大的库,用-F 选项压出来才 30M。
    GrayLand119
        10
    GrayLand119  
       2018-07-30 09:57:18 +08:00
    貌似 conda 会把环境包都打进去? conda list 查看是否有 pyqt.
    cfwyy
        11
    cfwyy  
    OP
       2018-07-30 10:05:25 +08:00
    感觉就是把 anaconda 下有的包都打进去了,楼上哥们说的 numpy pyqt 这些都是 anaconda 自带的。
    Fenrisu1fr
        12
    Fenrisu1fr  
       2018-07-30 14:32:46 +08:00
    Virtualenv 稳多了 建议楼主尝试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:59 · PVG 18:59 · LAX 02:59 · JFK 05:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.