最开始先把import的包去掉,运行打包后exe文件(在cmd里面或者powershell里面),根据缺少的包在everything软件里面一个个找到,加入到打包后的exe同一个路劲里面,打包命令。python -m nuitka --mingw64 --standalone --enable-plugin=tk-inter --show-memory --show-progress --nofollow-import-to=http,email,pandas,PySimpleGUI --output-dir=o main.py 引用的包有 import PySimpleGUI as sg import time import pandas as pd from pathlib import Path import shutil import numpy as np 自己的包有两个 在打包后添加相应缺少的包后还会出现类似这样的错误No module named ‘pandas._libs.interval‘,也就是加入相应缺少的包,包里面的错误,开始缺少的包的版本问题,不断尝试不同版本的缺少包,还是不行,搞了很久,上https://github.com/Nuitka/Nuitka/issues?q=pysimplegui看了很多内容,群里面问了很多高手,最后决定放手一搏,升级nuitka(升级到1.7版本),让nuitka帮我解决包与包之间引用问题,直接用最简单的命令python -m nuitka --mingw64 --standalone --enable-plugin=tk-inter --show-memory --show-progress --output-dir=o main.py。这里要注意下,--enable-plugin=tk-inter是必须的因为pysimplegui用到了tkinter,有些插件nuitka是必须要知道的,不然nuitka不知道怎么帮你把复杂的插件打包,具体什么插件需要告诉nuitka用这个命令nuitka --plugin-list,查看下(估计以后nuitka会自动识别复杂插件,到时候就不需要告诉nuitka我用了什么复杂插件,请你帮我解决插件打包问题), 让nuitka帮我们打包所有用到的包时候,编译时间变的很长,起码pysimplegui是编译很久的,当编译完成后,放入在cmd里面或者powershell,运行,看会出现什么错误,我这里是缺少包的错误,在根据缺少的包,在everything里面找到(我这里加进去了这几个包:xlrd,jinja2,markupsafe),放入exe同一目录下,最后就打包成功了,连自己写的py类文件,他也一并打包进来,不用手动复制粘贴。 这里看错误情况的时候,如果有多个,先决绝缺少包的问题,错误是‘什么行什么引用不存在’等先不要理会。 注意点: 在使用插件时候--enable-plugin=tk-inter,nuitka是这样描述的tk-inter Required by Python's Tk modules.(其他的可以用nuitka --plugin-list查看),因此你的打包环境也要有TK 模块。 当你让nuitka帮你把import的包打包好,你打包的nuitka必须要有你import的包,入pandas,你让nuitka帮你打包,那么你的打包环境要有pandas。 个人的思考,不一定对的: 1 以前知乎大佬摸索出来的打包思路,去包,加入使用的框架,打包后按缺少的包一个个加入,直到可以运行,打包时候环境越干净越好,在我打包pysimplegui,搞了很久行不通,可能是pysimplegui引用的包太多了,在我们加入缺少的包后,可能存在包之间存在循环引用或存在变量名字相同等包与包之间的协同合作问题,加入相应包后,报错的地方是我们加入的包,具体到某一行import错误,或缺少xxx。按道理我们加入的包不可能出现内部代码的错误的,只可能说版本问题或者包与包之间协同合作问题。 2新版nuitka1.7版本也许对包之间的协同合作问题进行的改进,自动帮我们解决我在主程序中引用其他包、模块的问题。因此不需要--nofollow-import-to=http,email,pandas,PySimpleGUI等等一些用的包。 ·
打包pysimplegui经验
发布于 2020-01-03 253 次阅读