pyinstaller安装:
有三种方法:
1.在pycharm里安装
2.通过官网下载
3.在命令行下用pip下载
三种都试了,感觉用第三种更好。直接pip下载完就可以了,不用去配。可能遇到一些安装失败的问题,这就需要去网上查些资料了。
检查是否安装成功:
安装成功后,再输入一遍pip install pyinstaller,出现类似下面这种输出就成功了。
Requirement already satisfied 意思是 请求实际上已完成 嘛。
如果第一次用pyinstaller ,还不确定安装成功怎么办??
可以自己写一个简单的py程序,把他封装成exe 。再试试能不能打开。
比如写以下程序试试:示列一:
Text.py:
def text():
print("这是一次测试!")
input()
Try.py:
from Text import text
text()
关于封装:
先在命令行下到达需要封装程序那个文件:
在此路径下输入:
pyinstaller -F C:\Users\小尼\Desktop\抗疫\excel\Try.py -p C:\Users\小尼\Desktop\抗疫\excel\Text.py -p ....py
我是这样理解上面这句话的。
pyinstaller 表示使用 pyinstaller 进行封装。
-F 表示封装时,结果只有一个.exe文件。
-p 后接主程序还需要引用用到的自定义 .py文件。例如示列一的Try.py
-p ....py 表示主程序可能会引用其他更多的自定义 .py文件
-w 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
这些.py文件我都是用了绝对路径,因为怕pyinstaller 找不到对应的 .py文件。
嗯,就这样封装试试。如果打开exe 可以正常运行,表示安装的pyinstaller 是没问题的。同时在这个过程也清楚了用pyinstaller的使用步骤。
我是用pyinstaller 封装一个pygame 写的小游戏。游戏中用的了外部字体,外部图片,外部音频。如果按照上述方法封装后运行不了。。。
毕竟程序中用这些外部文件时,使用的是相对路径。当然如果用绝对路径应该可以打开。
其实,封装后,相当于所有被封装的.py文件都和到.exe中了。那么用.exe时,当前程序文件的路径就是当前.exe文件下。
可以试验一下:
在要封装的程序下加上:
import sys
print(sys.argv[0])
input()
输出当前文件的路径,那么封装后,依然可以知道程序的路径。
我们可以把这个.exe文件复制一份,放到我们主程序.py文件下的路径的就可以解决引用文件的路径问题了。如下:
看到一些博客说改上面的 .spec文件,再封装一次。其实也不需要。
改.spec文件再封装一次也是为了解决外部文件引用路径问题。这种改.exe的位置也是解决外部文件引用路径问题。
封装后,点开.exe 闪退问题解决:
封装后,如果程序出现编译错误。就直接退出,看不到Traceback的信息了。
可以在命令行下,运行.exe,就可以看到Traceback的信息了。可是这种方法的Traceback信息有时不准确。
pyinstaller 有一些封装限制的。比如程序中不可以用.ogg .mp3 格式的音频。只可以用.wav 格式的音频等等。。。。。
出现闪退,很多时候都是这些封装限制造成的。
这么多行代码,怎么知道那些代码不可以被封装??
我的解决方法是每个py文件的 代码都运行一次,再封装,看看封装后能不能正常运行。
能运行就证明这整个py文件的代码都是可以被封装的。不能的话,则重点看这个py文件那些代码不能被封装。