python:pyinstaller用法

文章目录

  • 一、基本用法
  • 二、pyinstaller相关参数
  • 三、载入图片数据
    • 1、编辑qrc文件
    • 2、qrc转换为py文件
    • 3、代码中载入py文件
  • 四、打包依赖文件
  • 五、问题集锦
    • 1、启动多进程时,产生多个窗口

一、基本用法

在项目所在文件夹按住shift 单击鼠标右键弹出菜单,打开Powershell,直接输入代码:

1、带图标,生成一个文件,关闭控制台

pyinstaller -F -w -i p.ico 1.py

2、生成一个文件,关闭控制台

pyinstaller -F -w 1.py

3、生成一个文件,关闭控制台,添加数据,排除不必要的库

pyinstaller -Fwi 4.ico 1.py --add-data 'data;.' --exclude-module Pillow --exclude-module tkinter

二、pyinstaller相关参数

参数 作用
-F, onefile 产生一个文件用于部署(参见 XXXXX).
-D, onedir 产生一个目录用于部署(默认)
-K, tk 在部署时包含TCL/TK
-a, ascii 不包含编码,在支持 Unicode 的 python 版本上默认包含所有的编码
-d, debug 产生debug 版本的可执行文件
-w, windowed,noconsole 使用Windows子系统执行,当程序启动的时候不会打开命令行,只对Windows 有效
-c, nowindowed,console 使用控制台子系统执行(默认),只对Windows有效
-s, strip 可执行文件和共享库将run through strip. 注意 Cygwin 的 strip 往往使普通的 win32 Dll 无法使用
-X, upx 如果有UPX 安装 执行 Configure.py 时检测 会压缩执行文件(Windows 系统中的 DLL 也会 参见 note)
-o DIR, out=DIR 指定spec 文件的生成目录 如果没有指定 而且当前目录是 PyInstaller的根目录 会自动创建一个用于输出 (spec 和生成的可执行文件 的目录 如果没有指定 而当前目录不是 PyInstaller 的根目录 则会输出到当前的目录下
-p DIR, path=DIR 设置导入路径和使用 PYTHONPATH 效果相似 可以用路径分割符(Windows 使用分号 ,Linux 使用冒号 分割 指定多个目录 也可以使用多个 p 参数来设置多个导入路径
–icon= 将file.ico 添加为可执 行文件的资源 只对 Windows 系统有效
–icon= 将file.exe 的第 n 个图标添加为可执行文件的资源 只对Windows 系统有效
-v FILE,version=FILE 将verfile 作为可执行文件的版本资源 只对 Windows 系统有效
-n NAME,name=NAME 可选的项目(产生的 spec 的)名字 如果省略 第一个脚本的主文件名将作为 spec 的名字

三、载入图片数据

1、编辑qrc文件

  • ①先把图标资源文件放到工程所处的文件夹下面
  • ②在同一目录下(后面的操作都在该目录进行)创建一个 txt 文件 resource.txt 打开编辑
    格式如下:
<RCC>
    <qresource prefix="/">
        <file>1.png</file>
        <file>2.png</file>
        <file>3.png</file>
        ......
        # 有多少文件就写多少行
    </qresource>
</RCC>
  • ③保存后更改文件后缀名为.qrc
    python:pyinstaller用法_第1张图片

2、qrc转换为py文件

  • ①在项目所在文件夹按住shift 单击鼠标右键弹出菜单,打开Powershell

  • ②键入命令pyrcc5 -o 目标文件名 源文件名
    在这里插入图片描述

3、代码中载入py文件

python:pyinstaller用法_第2张图片
python:pyinstaller用法_第3张图片

注意:图片名称还是原来的名称,前面的“:”冒号一定不能少
最后使用pyinstaller 打包
键入pyinstaller -F -w -i 1.ico work.py
这个时候将之前用到的png 图标文件、qrc 文件和pyinstaller 生成的两个文件夹等删除也可以正常运行

四、打包依赖文件

源代码中所需路径修改为:

import os

# 路径转换函数
def temp_file(text):
    if getattr(sys, 'frozen', None):
        basedir = sys._MEIPASS
    else:
        basedir = os.path.dirname(__file__)

    print(basedir)

    return os.path.join(basedir, text)

# 调用时
file_path = temp_file('1.xlsx')

打包命令:pyinstaller -Fwi w.ico 1.py --add-data '1.xlsx;.'

五、问题集锦

1、启动多进程时,产生多个窗口

multiprocessing.freeze_support()    # 多进程冻结窗口

在主进程中使用:
python:pyinstaller用法_第4张图片
在多进程调用的函数后面使用:
python:pyinstaller用法_第5张图片

你可能感兴趣的:(第三方模块,python,pyinstaller,exe,打包)