起因
我之前一直以为如果在原代码中引用了什么包什么库,pyinstaller会把整个包打进去,
但我将文件夹点开后,发现事情没那么简单。
好像没打进去很多东西
对比源代码,少了很多
![](https://img-blog.csdnimg.cn/img_convert/7500e3fa00d06a31677fff6a8728d813.png)
![](https://img-blog.csdnimg.cn/img_convert/534f3234fa6c67273789e8dd71716b1f.png)
那么,是因为pyinstaller很智能吗,扫出来我究竟导了什么?
如果能,能扫出每一种导入方式吗?
经过
我写了三个文件,引用了numpy和PIL。作用是画出一个这样的画
![](https://img-blog.csdnimg.cn/img_convert/d4fe59b20624eef00161321b4522ec48.bmp)
#01.py
from PIL import Image
import numpy
im=numpy.linspace(1,256,27000000)
im=im.reshape((300,300,300))
im=Image.fromarray(im,mode="RGB")
im.save("1.bmp")
#02.py
from PIL import Image
from numpy import linspace
im=linspace(1,256,27000000)
im=im.reshape((300,300,300))
im=Image.fromarray(im,mode="RGB")
im.save("1.bmp")
#03.py
from PIL import Image
from numpy import *
im=linspace(1,256,27000000)
im=im.reshape((300,300,300))
im=Image.fromarray(im,mode="RGB")
im.save("1.bmp")
再用pyinstaller打包(不给参数)
结果如下
py 打出来的文件夹大小79401921字节
py 79401951字节
py 79401948字节
大小差距都在100字节以内,没有明显差距
结论
pyinstaller能够分辨源代码中引用什么包中的什么模块,对于三种导入(导入模块、导入模块中的所有东西、导入模块中的指定东西)都是成立的。并在可能范围内减小文件体积