• Pyinstaller如何将资源文件一起打包至exe中


    基本原理:Pyinstaller 可以将资源文件一起bundle到exe中,当exe在运行时,会生成一个临时文件夹,程序可通过sys._MEIPASS访问临时文件夹中的资源

    官方说明:https://pythonhosted.org/PyInstaller/spec-files.html#spec-file-operation

    测试案例功能描述,访问资源文件夹res/a.txt,并打印其内容。实现方法如下:

    源码如下,比较简单,resource_path方法说明了如何使用sys._MEIPASS变量来访问临时文件夹中的资源

    #coding:utf-8
    import sys
    import os
    
    #生成资源文件目录访问路径
    def resource_path(relative_path):
        if getattr(sys, 'frozen', False): #是否Bundle Resource
            base_path = sys._MEIPASS
        else:
            base_path = os.path.abspath(".")
        return os.path.join(base_path, relative_path)
    
    #访问res文件夹下a.txt的内容
    filename = resource_path(os.path.join("res","a.txt"))
    print(filename)
    with open(filename) as f:
        lines = f.readlines()
        print(lines)
        f.close()

    结下来介绍如何生成exe

    首先需要生成spec文件,pyi-makespec -F test.py (如果要添加Icon等可以在这里就使用pyi-makespec --icon abc.jpg -F test.py语句生成spec文件)

     编辑spec文件,在datas选项中说明需要将哪些文件加入exe,在零时文件夹中命名成什么

    以下图为例,意思将test.py当前目录下的res目录(及其目录中的文件)加入目标exe中,在运行时放在零时文件的根目录下,名称为res

     生成EXE文件,pyinstaller -F test.spec

    运行生成的EXE,可以看到资源生成的临时文件夹路径

  • 相关阅读:
    修改mysql密码的四种方法
    phpcms模板生成原理
    如何给虚拟主机安装phpMyAdmin
    如何修改数据库密码
    web 服务器、PHP、数据库、浏览器是如何实现动态网站的
    编写shell时,提示let/typeset:not found
    Linux下采用VI编辑器删除复制或移动多行文本内容
    BASH 学习笔记小结
    list容器的C++代码实现
    Groovy入门教程
  • 原文地址:https://www.cnblogs.com/darcymei/p/9397173.html
Copyright © 2020-2023  润新知