【问题标题】:Pyinstaller with pywinauto huge file size具有 pywinauto 巨大文件大小的 Pyinstaller
【发布时间】: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==223pywin32==225。目前官方pyWin32包中的第二个。
  • 我正在使用 Anaconda Python 发行版。让我想到它是 pywinauto 的原因是,如果我从导入中删除它,我会得到一个小 10 倍的 exe 文件。

标签: python pyinstaller pywinauto


【解决方案1】:

我重新安装了 python 3.7,因为我之前使用的是 Anaconda 的 Python 发行版,只安装了我需要的包并再次使用 pyinstaller 编译它。现在我有一个带有--onefile 的35Mb 文件或一个带有--onedir 的120Mb 文件夹。我可能会使用 onedir,因为这样应用程序加载速度更快。我不认为它是理想的文件大小,但它肯定比以前更好(如果有人知道如何进一步减小应用程序的大小,请接受建议)。感谢瓦西里的帮助!

【讨论】:

  • 可以使用setup.py 中的excludes 列表从可执行文件中排除一些不必要的模块。应该很容易找到一些关于此的指南。经过多次实验和完全重新构建,我相信一个文件可以达到约 20 Mb。
  • 顺便说一句,您可以将自己的答案标记为已接受(左侧的灰色复选框)以改进 pywinauto 标签统计。谢谢!
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多