python pyinstaller打包常见问题(一):无法生成exe文件/打包闪退

项目场景:

小游戏程序,本地环境能正常运行

程序调用了wav文件,即音效资源文件

程序调用wav路径正确,也是采用绝对路径


问题描述:

程序制作完成后,进行了以下三步打包操作:

1、生成spec文件

在需要打包的程序的目录上,我进入终端输入以下命令进行打包:

pyinstaller -F -w snake.py

python pyinstaller打包常见问题(一):无法生成exe文件/打包闪退_第1张图片

2、修改spec文件

2.1、打开生成的snake.spec文件

python pyinstaller打包常见问题(一):无法生成exe文件/打包闪退_第2张图片

2.2、修改Analysis 的 pathex(程序所在目录的路径).

2.3、修改Analysis 的 datas(调用文件的路径).

a = Analysis(
    ['snake.py'],
    pathex=['C:\\Users\xxx\\PycharmProjects\\pythonProject1'],
    binaries=[],
    datas=[('C:\\Users\xxx\\PycharmProjects\\pythonProject1\\猫咪吃东西.wav')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

3、生成exe文件(报错)

3.1、使用打包命令:

pyinstaller snake.spec

3.2、报错提示如下:

C:\Users\xxx\PycharmProjects\pythonProject1>pyinstaller snake.spec
309 INFO: PyInstaller: 5.10.0
309 INFO: Python: 3.7.4
310 INFO: Platform: Windows-10-10.0.22621-SP0
312 INFO: UPX is not available.
313 INFO: Extending PYTHONPATH with paths
['C:\\Users\\xxx\\PycharmProjects\\pythonProject1']
pygame 2.1.2 (SDL 2.0.18, Python 3.7.4)
Hello from the pygame community. https://www.pygame.org/contribute.html
896 INFO: checking Analysis
913 INFO: checking PYZ
927 INFO: checking PKG
931 INFO: Bootloader C:\Users\xxx\AppData\Roaming\Python\Python37\site-packages\PyInstaller\bootloader\Windows-64bit-intel\runw.exe
931 INFO: checking EXE


原因分析:

打包spec文件时报错,有两种可能:

1、生成的spec文件有问题

2、修改的spec文件有问题


解决方案:

根据上述分析,首先需要进行一项测试。确认生成spec文件正常!

一、不修改spec文件(正常)

跳过第二步打包操作,查看是否能生成exe文件。

python pyinstaller打包常见问题(一):无法生成exe文件/打包闪退_第3张图片

二、修改spec文件(解决)

既然不修改spec文件,能正常打包就说明是我修改spec操作不对!

1、查阅资料

  • scripts:命令行中命名的 python 脚本;

  • pure:脚本所需的纯 python 模块;

  • pathex:用于搜索导入的路径列表(如 using ),包括选项给出的路径。

  • binaries:脚本所需的非 Python 模块,包括名称 由选项给出;

  • datas:应用程序中包含的非二进制文件,包括给定的名称 通过选项。datas 采用元组(A,B):A,要打包的文件目录,B, 解压后该文件存放的目录(以 main.exe 解压目录为根)。

2、结论

我的问题是spec文件Analysis 的 datas少了目标路径。修改后成功生成exe,且功能正常!

修改代码如下

a = Analysis(
    ['snake.py'],
    pathex=['C:\\Users\xxx\\PycharmProjects\\pythonProject1'],
    binaries=[],
    datas=[('C:\\Users\xxx\\PycharmProjects\\pythonProject1\\猫咪吃东西.wav', '.')],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

总结:

也许朋友使用pyinstaller报错的原因与我不同,但是朋友也可以根据以下步骤寻找答案:

1、前提

本地环境python运行正常,调用文件的路径正确(绝对路径)

2、测试

在需要打包的程序的目录上,依次输入如下打包命令:

pyinstaller -F -w xxx.py
pyinstaller xxx.spec

3、结论

如果能正常生成exe,只不过运行报错,那么正确修改spec就行
反之pyinstaller程序有误,建议重新下载正确版本

下一篇:python pyinstaller打包常见问题(二):No file找不到文件解决办法

如果还是解决不了问题的话,可以评论区联系我。

        

你可能感兴趣的:(android,python,pygame,windows)