基于Kivy的Python界面程序打包为EXE的问题

最近用Python3.6开发的一个工具程序,基于Kivy1.10.0做的界面开发。不过在打包成EXE的过程中有很多问题,通过多次Google才搞定。

EXE打包过程:(Windows10 环境)

pip install pyinstaller (如果pip未安装,需自行安装)
pip install pycrypto (加密需要)
pyi-makespec -F main.py (生成SPEC文件,main.py为主程序入口文件)
pyinstaller main.spec (打包生成EXE, 会生成build,dist两个目录, main.exe将在dist目录下,如果需要加密,增加 --key=xxxxxxxxx参数)

问题一 pycrypto报错:找不到"stdint.h"

需要安装Visual Studio,我的环境中本来就有Visual Studio 2017,只需进入设置-》应用和功能,找到Microsoft Visual Studio Installer,修改安装,检查以下三项是否勾选:

  1. 通用Windows平台开发
  2. Windows C++开发
  3. Python开发

安装过程比较漫长,安装完成进入开始菜单,找到Visual Studio 2017 ,点击进入VS 2017 兼容工具命令行(英文:Visual Studio 2017 Cross Tool Command Line)
打开命令行以后,输入以下命令并执行:s

set CL=/FI”%VCINSTALLDIR%\INCLUDE\stdint.h” %CL% 

如果仍然报找不到stdint.h的错误,那么可以搜索Visual Studio的安装根路径比如C:\,看看实际stdint.h在哪个目录下,找到以后直接拷贝到%VCINSTALLDIR%\INCLUDE也可以。
设置完成以后,重新执行pip install pycrypto
后面可能仍然会出现找不到vcruntime.h,同样处理即可。

问题二 EXE执行报错: SDL2: Unable to load image

这是Kivy的问题,也是打包分成2步的原因,在打包的过程漏掉了2个模块:SDL2, GLEW
pyi-makespec -F main.py 成功执行后会生成main.spec文件,这步作用实际是分析依赖的库,为下一步生成独立EXE做准备。main.spec实际也是一个python文件,需要在python文件里面增加如下两行代码:

  1. 以下是增加的一行代码:
from kivy.deps import sdl2, glew

以下是增加sdl2和glew两个库的实际路径的修改代码:

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
          name='main',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

2 以下是实际增加的一行代码:

 *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],

问题三 EXE执行报错: pandas._libs.tslibs.np_datetime找不到模块

我的程序使用了Pandas,Pandas隐含加载了其他的库比如:
pandas._libs.tslibs.np_datetime,
pandas._libs.tslibs.timedeltas,
pandas._libs.tslibs.nattype,
pandas._libs.skiplist,
win32timezone

在main.spec生成过程中,依赖分析没有找到,因此需要我们在spec文件手工导入,在spec中修改一行代码:

a = Analysis(['main.py'],
             pathex=['d:\\HPCasToolInstaller'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

实际修改的一行代码:

hiddenimports=['pandas._libs.tslibs.timedeltas', 'pandas._libs.tslibs.nattype', 'pandas._libs.skiplist', 'pandas._libs.tslibs.np_datetime', 'win32timezone'],

经过以上处理,打包完成后的EXE应该可以实际运行了,如果Kivy界面通过kv文件创建,还需要把kv文件放到EXE相同目录下,否则运行出来的界面只是一个空界面,没有任何控件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容