pyinstaller和py2exe是常用的.py打包.exe工具,但打包引用了pyecharts的代码时总是报错。虽然.exe打包成功,但双击运行时闪退,报错:
[Errno 2] No such file or directory: 'C:\Users\ADMINI~1\AppData\Local\Temp\_MEI一串数字\pyecharts\datasets\map_filename.json
这是因为打包时修改了.\site-packages\pyecharts\datasets\_init_.py里的__HERE变量,使其找不到map_filename.json
网上有解决方案是重新源码安装pyecharts,可能有用,下面是我亲测有效的解决办法:
解决办法:
1.在.\Lib\site-packages\PyInstaller\hooks路径下新建一个hook-pyecharts.py,里面写入
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files('pyecharts')
2.在用Pyinstaller打包时,加入两个命令参数:
pyinstaller --add-data="D:\Program Files (x86)\PycharmProjects\map\Lib\site-packages\pyecharts;pyechats" --hidden-import=pyecharts.render.engine -F GUI.py
生成的.exe便可正常运行了
运行环境:
本人的运行环境是win7+python3.7,第三方库的路径为D:\Program Files (x86)\PycharmProjects\map\Lib\site-packages
Win10/Win7不兼容
之前是在win7环境下开发、打包,在win7环境运行没问题。之后开发环境变成win10,再去win7运行.exe就会报错:
缺少api-ms-win-crt-runtime-l1-1-0.dll
win10上就可以正常打开
解决办法:
网上有很多说在win7系统里加入这个.dll文件,然后在注册表启动。但这样太麻烦了,而且测试了没用,最好还是能一起打包进.exe。
这个.dll位于C:\Windows\System32\downlevel下,用pyinstaller打包时把路径加进去,隐式导入win32timezone,命令修改为:
pyinstaller -D -p C:\Windows\System32\downlevel --add-data="C:\Users\Faker\AppDat
a\Local\Programs\Python\Python36\Lib\site-packages\pyecharts;pyechats" --hidden-import=pyecharts.render.engine;win32timezone -F GUI.py
这次打包的.exe可以在win7正常运行了