Pyinstaller 巨大的文件大小问题

Pyinstaller huge file size issue

我做了一个简单的网页抓取脚本和一些电子邮件发送,并尝试使用Pyinstaller将其制作成.exe应用程序,但我没想到最终的.exe版本会这么大,它大约360MB。 我用这一行在 cmd -> pyinstaller --onefile scriptName.py

中将其转换为 .exe

有什么办法可以减小 .exe 文件的文件大小?它实际上只是网络抓取脚本,在 cmd 上显示抓取的文本。

我的进口商品:

from bs4 import BeautifulSoup
import pandas as pd 
import time
import smtplib


我根据您的依赖项测试了一个最小示例,仅通过使用导入中的一些函数,我已经得到了一个 65 MB 大小的包。所以我认为您的包裹这么大是很常见的。据我所知,pyinstaller 检查您所有的导入并从该模块使用 functions/classes,并且只包含那些,所以我不确定您是否可以在不更改代码的情况下进一步减小大小。

但是,基于 ,您应该在仅包含绝对必要的包的虚拟环境中创建 pyinstaller 包。此外,也许您可​​以尝试消除不必要的功能并尝试重新使用其他功能。

除此之外,尝试在不使用 --onefile 的情况下打包它,然后将其打包为 zip 文件,或者甚至使用 Inno Setup 来缩小包的大小 - 那里有如何使用它的教程。我实现了从我认为 ~600-700mb 到 150mb 安装程序的包。然而,这需要一些额外的工作,可能不是您想要的。这是我用于 65mb pyinstaller 包的测试代码:

from bs4 import BeautifulSoup
import pandas as pd 
import time
import smtplib

soup = BeautifulSoup("<p>Some<b>bad<i>HTML")
print(soup.prettify())

def some_function():
    print("Starting function")
    time.sleep(1)
    print("Ending function")

some_function()


try:
    with smtplib.SMTP("domain.org") as smtp:
        smtp.noop()
        print("Did something with smtplib.SMTP")
except:
    print("Couldnt connect via smtplib")

mydataset = {
  'cars': ["BMW", "Volvo", "Ford"],
  'passings': [3, 7, 2]
}

myvar = pd.DataFrame(mydataset)

print(myvar)