首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我不能减少PyInstaller生成的包的大小

我不能减少PyInstaller生成的包的大小
EN

Stack Overflow用户
提问于 2017-05-09 22:20:26
回答 1查看 888关注 0票数 1

我用python3和Kivy写了一个小应用。这个应用是基于python和kv文件的。我想为Windows创建一个包。基于在官方文档中找到的信息,我能够创建一个包,但它真的很大!然后,我尝试减少包的大小,不包括未使用的库。为此,我再次遵循了官方文档。

这是我创建和修改的spec-file:

代码语言:javascript
运行
复制
from kivy.deps import sdl2, glew
from kivy.tools.packaging.pyinstaller_hooks import get_deps_minimal,     hookspath
# -*- mode: python -*-

block_cipher = None


a = Analysis(['main.py'],
             pathex=['C:\\Users\\..\\wecker'],             
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=hookspath(),
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             **get_deps_minimal(video=None, audio=None))
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='myweckapp',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe, Tree('buildtemp'),
               a.binaries,
               a.zipfiles,
               a.datas,
               *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
               strip=False,
               upx=True,
               name='myweckapp')

当我运行该命令时:

代码语言:javascript
运行
复制
python -m PyInstaller --name touchtracer examples-path\demo\touchtracer\main.py

我得到以下错误消息:

代码语言:javascript
运行
复制
WARNING: stderr: TypeError: type object got multiplevalues for keyword argument 'excludes'

我不能继续了。我试着去掉代码行:

代码语言:javascript
运行
复制
excludes=[],

然后我收到了以下消息:

代码语言:javascript
运行
复制
WARNING: stderr: TypeError: type object got multiplevalues for keyword argument 'hiddenimports'

因此,我还尝试删除这一行:

代码语言:javascript
运行
复制
hiddenimports=[]

现在,我可以创建一个包,但它仍然很大!

知道我哪里错了吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-11 00:02:34

它有多大?我以前在使用PyInstaller时也遇到过类似的大小问题。我有一些很大的模块,比如IPython,cv2等等,PyInstaller默认情况下不会排除它们。您可以运行以下代码来获取所有已安装和内置的python模块的列表:

代码语言:javascript
运行
复制
import pkgutil
for i in pkgutil.iter_modules():
    print('"'+i[1]+'",')

这将为您提供所有已安装模块的列表。接下来,运行以下命令来生成SPEC文件:

代码语言:javascript
运行
复制
pyi-makespec main.py

接下来,打开等级库文件。在excludes部分中,粘贴从上面的代码创建的列表。只删除您需要的那些(您将需要删除几个内置组件)。看看这是否有帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43872369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档