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()
页: 1 [2] 3
查看完整版本: 怎么把飞机大战的py文件做成安装包