【发布时间】:2019-10-10 04:21:14
【问题描述】:
我有一个要编译成可执行文件的脚本。我正在使用 Pyinstaller 执行此任务,生成的 exe 文件太大。
有几个导入,其中之一是 pywinauto。如果我评论 pywinauto 导入,我会得到一个 20mb 的可执行文件。使用 pywinauto,我得到一个 232mb 的可执行文件!
注意:我从一个虚拟环境中运行 pyinstaller,我刚刚在其中安装了我在脚本中使用的必要的 python 依赖项。
这是我正在使用的导入列表:
import os,subprocess,datetime, argparse, math, win32con
import boto3
from botocore.exceptions import NoCredentialsError
from botocore.client import Config
import wx,wx.adv
from pubsub import pub
from win32api import GetSystemMetrics
from pywinauto.application import Application
from pywinauto.keyboard import SendKeys
from pywinauto.findwindows import find_window
from base64 import b64decode
from zlib import decompress
from io import BytesIO
我正在运行的 Pyinstaller 命令:
pyinstaller --noconsole --onefile --i=rec.ico --clean script.py
pip list 在我的虚拟环境中:
Package Version
--------------- --------
boto3 1.9.246
botocore 1.12.246
comtypes 1.1.7
docutils 0.15.2
jmespath 0.9.4
Pillow 6.2.0
pip 19.2.3
pubsub 0.1.2
pypiwin32 223
python-dateutil 2.8.0
pywin32 225
pywinauto 0.6.7
s3transfer 0.2.1
setuptools 40.8.0
six 1.12.0
urllib3 1.25.6
wheel 0.33.6
wxPython 4.0.6
有什么办法可以减小可执行文件的大小?
我基本上使用 pywinauto 将键盘快捷键命令从我的脚本发送到另一个应用程序。如果有一个替代库可以使我的可执行文件更小,我当然会尝试。
谢谢!
=====================
编辑:
我尝试编译:
pyinstaller --noconsole --onedir --i=rec.ico --clean script.py
现在我得到一个 660mb 的文件夹!!!而且应用程序加载速度更快(之前加载大约需要 15 秒,现在几乎是立即加载)。
应用程序的文件夹有很多 dll 文件,其中最大的 19 个文件总计 537 Mb。
对如何修剪有什么建议吗?
【问题讨论】:
-
你可以尝试只打包
pywin32包而不使用pywinauto 和comtypes 吗? -
不确定这是否是您的意思,但这是我根据您的评论尝试的方法:我去了我的虚拟环境并做了
pip uninstall comtypes和 pywinauto。然后我用 pyinstaller 编译了 exe:pyinstaller --noconsole --onefile --i=rec.ico --clean script.py,与上面的导入相同。给我一个 232mb 的可执行文件。 -
问题肯定不在pywinauto。 MKL 和 TBB 是英特尔库。您使用的是英特尔 Python 发行版吗?有趣的是,你是如何变得依赖他们的。
pywinauto肯定不会使用它们。如果是 Intel Python 发行版,我建议检查import math。 -
顺便说一句,您有重复安装:
pypiwin32==223和pywin32==225。目前官方pyWin32包中的第二个。 -
我正在使用 Anaconda Python 发行版。让我想到它是 pywinauto 的原因是,如果我从导入中删除它,我会得到一个小 10 倍的 exe 文件。
标签: python pyinstaller pywinauto