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

2018-07-30 09:06:20 +08:00
 cfwyy
小弟新手,对于 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 第三方模块。

求大神 科普一下。不胜感激!
7008 次点击
所在节点    Python
12 条回复
huangzhe8263
2018-07-30 09:30:16 +08:00
一般建议在 virtualenv 下打包,只导入需要的模块即可
huangzhe8263
2018-07-30 09:32:42 +08:00
以及最后生成导出的话都会加个参数 -F , 这样只会生成一个二进制文件在 dist 目录下
cfwyy
2018-07-30 09:37:56 +08:00
@huangzhe8263 谢谢! virtualenv 下次再好好研究研究。
能否科普一下打包的原理吗?为什么直接在 anaconda 的环境下,这么多东西会打包进去?
cfwyy
2018-07-30 09:41:17 +08:00
-F 生成单个文件 这个我知道 不过 就算这样 单个文件也有近 300M。而且单个文件启动会慢一点。
greatx
2018-07-30 09:44:09 +08:00
mkl 库 一般用于 numpy 之类的科学计算环境
huangzhe8263
2018-07-30 09:46:12 +08:00
估计是 anaconda 链接了不少不需要的库和包吧
可以用 pyinstaller options script.spec 查看下依赖项
huangzhe8263
2018-07-30 09:47:57 +08:00
嗯对是会慢, 我那脚本跑起来就一直运行了到没太注意...
YuuuZeee
2018-07-30 09:48:30 +08:00
环境还是 docker 控制下比较清真…
sikariba
2018-07-30 09:48:42 +08:00
我前段时间也在 conda 下打包过一次,而且还 import 了 pandas 这种巨大的库,用-F 选项压出来才 30M。
GrayLand119
2018-07-30 09:57:18 +08:00
貌似 conda 会把环境包都打进去? conda list 查看是否有 pyqt.
cfwyy
2018-07-30 10:05:25 +08:00
感觉就是把 anaconda 下有的包都打进去了,楼上哥们说的 numpy pyqt 这些都是 anaconda 自带的。
Fenrisu1fr
2018-07-30 14:32:46 +08:00
Virtualenv 稳多了 建议楼主尝试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/475202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX