python版本 3.6 pyinstaller 3.4
1.pip install pyinstaller
2.在你入口脚本同级目录执行
pyinstaller -F -w -i icon.ico start.py
-w 表示隐藏程序运行时的命令行窗口(不加-w会有黑色窗口)
-i 是自定义执行程序的图标 不加就默认图标。
3.执行完控制台看到 completed successfully. 就行了
4.会生成一个dist文件夹 里面就是打包好的.exe程序 双击运行就可以了。
以上是正常流程
但有时候会执行报错闪退,而此时你又看不到日志,就用下面这个
打开CMD 运行在dist路径下的 exe
此时就能看到报错信息。
路径相关报错
if getattr(sys, 'frozen', False):
absPath = os.path.dirname(os.path.abspath(sys.executable))
elif __file__:
absPath = os.path.dirname(os.path.abspath(__file__))
将路径打印出来看看。
前面已经讲过,pyinstaller单文件模式下的exe启动后,会将嵌入的资源文件放到一个临时的文件夹中,这个文件夹的名字不是固定的,叫做_MEIxxxxx,其中xxxxx是随机数。这个文件夹的路径在打包后会被放到sys._MEIPASS这个变量里面,只需要调用sys._MEIPASS就可以获得这个路径文件夹。
于是,我们通过以下函数返回正确的路径:
def get_path(relative_path):
try:
base_path = sys._MEIPASS # pyinstaller打包后的路径
except AttributeError:
base_path = os.path.abspath(".") # 当前工作目录的路径
return os.path.normpath(os.path.join(base_path, relative_path)) # 返回实际路径