Richard_Chiang
发表于 2020-5-28 00:58:10
1、执行环境说明
python版本3.7
直接使用pip进行安装pywin32、pyinstaller
pip install pywin32
pip install pyinstaller
2、使用了第三方库的情况
建议在打包之前务必找到第三方库的包,把包复制到到跟myfile.py同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退。pyinstaller -p参数是添加的pyinstaller打包程序时的扫描路径,假设venv\Lib\site-packages是包存放路径,那么也可以使用以下命令打包:
pyinstaller -p venv\Lib\site-packages -F xxx.py
3、failed to execute script 错误
首先使用
pyinstaller -F -w code.py
进行exe打包,得到的单个.exe文件,运行后提示failed to execute script 错误
排错过程:使用pyinstaller -D code.py进行exe打包,得到一个目录文件,通过命令行执行.exe文件提示The 'six' package is required; normally this is bundled with this package错误
说明pyinstaller打包后,需要six等库,最终确认需要在code.py中添加以下库:
1
2
3
4
5
import six
import packaging
import packaging.version
import packaging.specifiers
import packaging.requirements
当然,six和packaging库建议使用pip安装。加入以上库后,使用pyinstaller -D code.py打包执行不再出错。
4、找不到数据文件夹
有些程序包含了数据文件夹,不能直接按资源文件方式打包,需要在执行文件所在的文件夹内创建这些数据文件。一般情况下在脚本中我们可以使用os.path.split(os.path.abspath( __file__))来的到code.py的路径,然后拼接得到数据文件夹。但之后使用pyinstaller -F code.py打包成单个exe文件,在未读取数据文件夹的情况下运行正常,一旦打开数据文件,就会闪退,命令行窗口会显示打不开数据文件。因为PyInstaller会创建临时文件夹temp,程序代码在这个临时文件夹中运行,我们可以用以下几个语句来查看正式运行路径:
1
2
3
4
5
6
import sys
import os
print(sys.path)
print(sys.argv)
print(os.path.dirname(os.path.realpath(sys.executable)))
print(os.path.dirname(os.path.realpath(sys.argv)))
得到的结果是os.path.dirname(os.path.realpath(sys.executable))和os.path.dirname(os.path.realpath(sys.argv))才是含数据文件夹的路径。因此可以按如下方式取得文件路径,然后根据需要拼接得到数据文件夹的真实路径:
1
2
3
4
5
6
if hasattr(sys, '_MEIPASS'):
# PyInstaller会创建临时文件夹temp
# 并把路径存储在_MEIPASS中
self.appPath = os.path.dirname(os.path.realpath(sys.executable))
else:
self.appPath, filename = os.path.split(os.path.abspath( __file__))
if hasattr(sys, '_MEIPASS'):
# PyInstaller会创建临时文件夹temp
# 并把路径存储在_MEIPASS中
self.appPath = os.path.dirname(os.path.realpath(sys.executable))
else:
self.appPath, filename = os.path.split(os.path.abspath( __file__))
修改完成后,分别以以下三种方式打包,运行成功
1
2
3
pyinstaller -D code.py
pyinstaller -F code.py
pyinstaller -w -F code.py
老八秘制
发表于 2020-5-28 07:24:04
Richard_Chiang 发表于 2020-5-28 00:58
1、执行环境说明
python版本3.7
emmm……lz要的好像是打包安装包,不是exe……
liaoyiqin
发表于 2020-5-28 08:01:19
不用编辑器直接打开
wuqramy
发表于 2020-5-28 09:09:36
暂停和声音调节参考:https://fishc.com.cn/thread-168455-1-1.html
打包参考:https://www.cnblogs.com/jieliu8080/p/10685146.html
f1305147
发表于 2020-5-28 09:16:32
解释型语言也能打包啊?又没编译器。
时光纪
发表于 2020-5-28 16:35:25
安装pyinstaller
PowerShell
PS C:\Users\asus> cd E:\飞机大战
PS E:\飞机大战> pyinstaller main.py enemy.py bullet.py myplane.py supply.py
生成dist和build
把images,font,sound三个文件复制到 dist\main\
运行exe
有其他问题就百度
weiter
发表于 2020-5-28 22:52:45
f1305147 发表于 2020-5-28 09:16
解释型语言也能打包啊?又没编译器。
你以为?
老八秘制
发表于 2020-5-29 09:15:54
时光纪 发表于 2020-5-28 16:35
安装pyinstaller
PowerShell
PS C:%users\asus> cd E:\飞机大战
lz不是这个意思……
1q2w3easxz
发表于 2020-5-29 20:52:36
后缀改成zip
永恒的蓝色梦想
发表于 2020-5-29 21:43:23
1q2w3easxz 发表于 2020-5-29 20:52
后缀改成zip
胡说第一名。
Mike_python小
发表于 2020-5-30 08:52:00
1q2w3easxz 发表于 2020-5-29 20:52
后缀改成zip
你可真行呀呵呵
1q2w3easxz
发表于 2020-5-30 11:27:54
Mike_python小 发表于 2020-5-30 08:52
你可真行呀呵呵
哈哈哈
1q2w3easxz
发表于 2020-5-30 11:28:32
永恒的蓝色梦想 发表于 2020-5-29 21:43
胡说第一名。
谢谢夸奖
Mike_python小
发表于 2020-5-30 11:29:14
1q2w3easxz 发表于 2020-5-30 11:27
哈哈哈
emm
吧新创建一个名字叫我的电脑的文件夹
你就有了一台新的电脑
老八秘制
发表于 2020-6-2 17:35:36
Mike_python小 发表于 2020-5-30 11:29
emm
吧新创建一个名字叫我的电脑的文件夹
艹
老八秘制
发表于 2020-6-2 17:41:46
Mike_python小 发表于 2020-5-30 11:29
emm
吧新创建一个名字叫我的电脑的文件夹
https://fishc.com.cn/thread-171013-1-1.html
liuzhengyuan
发表于 2020-6-2 22:18:09
f1305147 发表于 2020-5-28 09:16
解释型语言也能打包啊?又没编译器。
当然能
wuqramy
发表于 2020-6-2 22:27:28
1q2w3easxz 发表于 2020-5-29 20:52
后缀改成zip
代码就完了
Aristo
发表于 2020-6-10 22:31:09
mzlhandsome 发表于 2020-5-27 18:00
还有 怎么把哪些文件处理成exe 就是那都能玩
去cmd打pip install pyinstaller。然后cd到python源文件的路径然后pyinstaller -F xxxx.py就会在当前文件夹下生成.exe文件了
xiaosi4081
发表于 2020-6-16 07:52:17
mzlhandsome 发表于 2020-5-27 18:52
我就是这样操作的啊
在末尾加个input()