废话不多说,反正我现在还没成功,不过我记录一下遇到的坑!

1:安装相关库太慢

解决办法:离线安装

在一大堆教程中,要安装好几个库,但是有些库用pip在线安装一直卡死(看不到进度条,就当卡死吧),这个问题可以使用离线安装来解决,下面附上解决过程!

安装错误提示(其实是太慢了,我强制停止了)

$ pip install pywin32
Collecting pywin32
Downloading https://files.pythonhosted.org/packages/a3/8a/eada1e7990202cd27e58eca2a278c344fef190759bbdc8f8f0eb6abeca9c/pywin32-224-cp37-cp37m-win_amd64.whl (9.0MB)
ERROR: Operation cancelled by user

  

解决方法如下:

首先找到这个库的下载链接,在这里的就是:

https://files.pythonhosted.org/packages/a3/8a/eada1e7990202cd27e58eca2a278c344fef190759bbdc8f8f0eb6abeca9c/pywin32-224-cp37-cp37m-win_amd64.whl

 

然后使用其他HTTP下载工具,我用的是IDM,也可以使用浏览器!

然后打开存放目录,

然后在这里打开命令行,执行

pip install pywin32-224-cp37-cp37m-win_amd64.whl

  

因为我的已经安装了,当时没截图,我也懒得卸载了,反正就是后面接上库文件就行了(输入文件名第一个字母之后,按TAB键可以补全)

然后到这里第一个坑就解决了,这个方法适合所有库的安装(官方太慢的时候或者需要安装第三方库)!!

第二个坑,调试没问题,运行就报错(代码错误)

在这里我确定使用py文件运行是没问题的,但是打包之后却提示我没有定义exit变量/函数(exit是系统变量)

对于这个问题我暂时的解决办法有两个,要么舍弃这个退出功能,否则无法打包,要么定义这个函数!

我的退出原代码为,这样子是打包不了的,至少我打包的时候是这样

bt_exit = tk.Button(win, text="更新软件", font=("宋体", 15), command=exit).place(x=500, y=250)

  

可以参考这个方法----python 退出程序方法

怎么去定义我就不细说了,能写出程序的人看了这个方法都会懂的

那么第二个坑就解决了(虽然我发现定义了之后点击退出却没有反应,这个可以点X关闭,所以我就先不管了)

第三个坑:运行提示Failed to execute script main

首先,执行构建命令:

pyinstaller -F 主程序.py

  

然后查看文件列表

将配置文件(背景文件)放在一起!

最后运行程序!----------------------居然不报错了!

​其实呢,在我之前的构建中是报错的,错误提示是

Failed to execute script

  

在这里我也顺便说一下理论能解决这个错误的方法

首先确保所需文件都在你写的相对目录里,例如我这个程序调用的背景写的是

impath = 'timg.jpg'
img = Image.open(impath)

  

所以这个timg.jpg是跟主程序在同一级目录的,这时候你就需要把这些调用的文件放在所在的目录,然后在构建文件编辑一下,方法如下:

找到这个.spec文件,使用文本编辑(在这里我用vim工具),下面第二张图(VIM);

windows用户建议使用Notepad++,下面第三张图(Notepad++)

反正就是在.spec里面修改一下参数,首先找到

a = Analysis

  

然后找到参数datas,在后面加上你需要调用的文件名(不在同级目录的要写路径加文件名),例如我这里要调用的是timg.jpg文件,而这个文件和程序在同一目录,那么参数就是

datas=['timg.jpg'],

  

假如我的代码写的是程序目录下的bg目录下的timg.jpg文件,那么参数就要写成

datas=['bg\timg.jpg'],

  

为避免出现各种错误,如果是小的程序,建议全部调用文件放在程序根目录!那么到这里也就成功一半了(总不能把程序发给别人的时候还要带上配置文件吧)!

接下来继续压缩!

在打包程序的时候是不会打包图片文件的,但是我们可以把图片文件转为py文件,所以解决这个背景问题的关键点就是这个了,下面附上一些别人的教程!

Pyinstaller 使用+打包图片方法

下面是我的打包记录。

首先安装相关库

pip install img
pip install base64

  

然后新建一个py文件,内容如下

#image转base64
import base64
with open("timg.jpg", "rb") as f:#转为二进制格式
base64_data = base64.b64encode(f.read())#使用base64进行加密
print(base64_data)
file = open('1.txt', 'wb')#写成文本格式
file.write(base64_data)
file.close()

  

上面的代码需要注意的就是变量,变量解释如下

"timg.jpg" #需要转换的图片文件
"bg.py" #要生成的图片PY文件

  

运行之后得到下面的数据----很长很长的,如果你得到的是很短的,那就考虑一下是不是图片原文件出问题了,还有一个更快的方法,在线转换

http://imgbase64.duoshitong.com/

然后得到这个开头的编码
data:image/jpeg;

  

转换之后就需要调用,调用方法如下

首先需要导入base64库以及OS库

所以需要添加的代码有两部分,第一部分是库导入

import base64
import os

  

第二部分则是创建临时文件的代码

strs = '''...............//Z\n\n\n\n\n \n\n\n'''
imgdata = base64.b64decode(strs)
file = open('timg.jpg', 'wb')
file.write(imgdata)
file.close()

  

上面的strs中,填写的方法为在下面这段代码中插入从网页获取到的图片转base4的加密信息

import os,base64
strs='''图片编码放这里,其他不要动\n\n\n\n\n \n\n\n'''
imgdata=base64.b64decode(strs)
file=open('1.jpg','wb')
file.write(imgdata)
file.close()

  

上面的代码中,1.jpg表示新生成的图片文字,这个要根据你的实际需求进行更改

那么,到这里就变相解决了无法打包图片文件的问题了,接下来重新封装程序看看

Python程序打包EXE遇到的各种坑的更多相关文章

  1. python程序打包exe文件

    第一步:安装依赖 pip install pyinstaller 第二步:移动文件 把python文件和一个exe拿来当图标的ico文件移动到同一文件中 注意:文件路径不用用中文!!!!!!!! 第三 ...

  2. python程序打包exe

    http://c.biancheng.net/view/2690.html 用inno setup做成安装包(官网上下载) http://www.jrsoftware.org/isdl.php

  3. 将Python程序打包为exe方法

    将Python程序打包为exe文件,需要使用到的工具是pyinstaller pyinstaller是一个多平台的Python程序打包为exe的免费工具 安装pyinstaller: 1,在Windo ...

  4. Python 程序打包成 exe 可执行文件

    Python 程序打包工具 Python 是一个脚本语言,被解释器解释执行.它的发布方式: .py 文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装 Python 并且安装依赖 ...

  5. Python程序打包为可执行文件exe

    Python程序打包为可执行文件exe,pyinstaller应用 山重水复疑无路,柳暗花明又一村. 本来是向老师提交一个python程序,因为第一次所以就很尴尬只把源码给老师了,应该是打包成一个可执 ...

  6. python程序打包工具 ── cx_Freeze

    cx_Freeze是一个类似py2exe的工具,它们区别是py2exe是将python程序打包成windows下可以执行的exe文件的,而cx_Freeze则是将python程序打包为linux下可以 ...

  7. Python:使用Kivy将python程序打包为apk文件

    1.概述 Kivy是一套Python下的跨平台开源应用开发框架,官网,我们可以用 它来将Python程序打包为安卓的apk安装文件.以下是在windows环境中使用. 安装和配置的过程中会下载很多东西 ...

  8. python程序打包

    环境: CentOS6.5_x64Python版本 : 2.6 使用pyinstaller打包 pyinstaller可以将python程序打包成二进制文件,打包后的文件在没有python的环境中也可 ...

  9. install4j 工具为java程序打包exe

    用 install4j 工具为java程序打包exe 制作人:mark 制作时间:2013-05-02 用Eclipse 将程序源码打包成jar文件. 打包jar方法我不做介绍了,相信大家都会,不会的 ...

随机推荐

  1. Python简介及学习

    Python简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 现在,全世界差不多有600多种编程语言,但流行的编程语 ...

  2. 快速傅里叶变换与快速数论变换瞎学笔记$QwQ$

    $umm$先预警下想入门$FFT$就不要康我滴学习笔记了,,, 就,我学习笔记基本上是我大概$get$之后通过写$blog$加强理解加深记忆这样儿的,有些姿势点我可能会直接$skip$什么的,所以对除 ...

  3. 洛谷$P4001\ [ICPC-Beijing 2006]$狼抓兔子 网络流+对偶图

    正解:网络流+对偶图 解题报告: 传送门! $umm$日常看不懂题系列了$kk$.其实就是说,给定一个$n\cdot n$的网格图,求最小割$QwQ$ 然后网格图的话显然是个平面图,又看到数据范围$n ...

  4. ReentrantLock 源码分析从入门到入土

    回答一个问题 在开始本篇文章的内容讲述前,先来回答我一个问题,为什么 JDK 提供一个 synchronized 关键字之后还要提供一个 Lock 锁,这不是多此一举吗?难道 JDK 设计人员都是沙雕 ...

  5. 大白话抽象工厂模式(Abstract Factory Pattern)

    实例分析 大白话工厂方法模式(Factory Method)一文中,我们讲解了日产4S店工厂规模的扩大,创建了针对不同车型的工厂,减少了工厂的工作内容,提高了效率.下面我们继续以4S店的故事讨论抽象工 ...

  6. HashMap,HashTable 区别,实现原理。

    HashMap是HashTable 的轻量级,非线程安全的,都是实现了map接口 区别:hashmap 允许空键值对的存在,非线程安全,效率高于hashtable,因为hashtable 是synch ...

  7. 【设计模式】 (2)关于UML

    UML -- Unified Modeling Lanaguage(统计建模语言),是一种软件系统分析和设计的语言工具,他用于帮助软件开发人员进行思考和记录思路的结果. UML本身是一套符号的规定,就 ...

  8. js的alert()

    效果图: 图一: 图二: 图三: 代码: <script type="text/javascript"> // alert() ; 只允许一个参数,如果有多个参数只显示 ...

  9. Beetlex实现完整的HTTP协议

    在传统网络服务中扩展中需要处理Bytes来进行协议的读写,这种原始的处理方式让工作变得相当繁琐复杂,出错和调试的工作量都非常大:组件为了解决这一问题引用Stream读写方式,这种方式可以极大的简化网络 ...

  10. cogs 1176. [郑州101中学] 月考 Map做法

    1176. [郑州101中学] 月考 ★★☆   输入文件:mtest.in   输出文件:mtest.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 在上次的月考中B ...