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)
我做了一个简单的网页抓取脚本和一些电子邮件发送,并尝试使用Pyinstaller将其制作成.exe应用程序,但我没想到最终的.exe版本会这么大,它大约360MB。
我用这一行在 cmd -> pyinstaller --onefile scriptName.py
有什么办法可以减小 .exe 文件的文件大小?它实际上只是网络抓取脚本,在 cmd 上显示抓取的文本。
我的进口商品:
from bs4 import BeautifulSoup
import pandas as pd
import time
import smtplib
我根据您的依赖项测试了一个最小示例,仅通过使用导入中的一些函数,我已经得到了一个 65 MB 大小的包。所以我认为您的包裹这么大是很常见的。据我所知,pyinstaller 检查您所有的导入并从该模块使用 functions/classes,并且只包含那些,所以我不确定您是否可以在不更改代码的情况下进一步减小大小。
但是,基于
除此之外,尝试在不使用 --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)