pyinstaller 打包多个资源文件到一个可执行文件

2020-12-04  本文已影响0人  辣辣不乖
参数 简介
-h 查看该模块的帮助信息
-F 产生单个的可执行文件
-D 产生一个目录(包含多个文件)作为可执行程序
-a 不包含 Unicode 字符集支持
-d 产生 debug 版本的可执行文件
-w 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,--name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

假设 main.py 脚本调用 bank.txt视频文件(main.py和bank.txt在同一级目录),那么将在main.py脚本需要这样写:

import os
import sys

def resource_path(relative_path):
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)
    
os.startfile(resource_path('bank.txt')) 
input()

将多个资源文件最后都打包成一个文件,会临时进行解压,解压的目录为:C:\Users\用户名\AppData\Local\Temp\随机目录名, 而我们找到这个目录就需要 sys._MEIPASS 这个属性数值,而如果没有这个属性的普通运行情况 会返回 os.path.dirname(os.path.abspath(__file__)) 也就是普通寻找文件的情况。

PY文件打包命令:

pyinstaller -F --add-data bank.txt;. main.py

注意: –add-data : 第一个参数 是要添加文件或路径 bank.txt;. = bank.txt + ; + . ,然后是一个分割符 在windows上是 ; linux上是 : 最后参数是 . 也就是打包后存在的路径,解压后的路径。在.spec里面结构如下:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['main.py'],
             pathex=['C:\\Users\\Administrator\\Desktop\\py\\py2exe'],
             binaries=[],
             datas=[('banks.txt', '.')], #注意这里,文件名,目录,. 表示当前目录
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='banknum',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

你也可以通过 pyi-makespec 来生成 spec文件,然后进行修改。

Spec文件打包命令:

pyinstaller -F main.spec  # 这里不是main.py 是 main.spec
上一篇 下一篇

猜你喜欢

热点阅读