pyinstall打包资源文件

相关代码

main.py

import sys
import os

#生成资源文件目录访问路径
#说明: pyinstaller工具打包的可执行文件,运行时sys。frozen会被设置成True
#      因此可以通过sys.frozen的值区分是开发环境还是打包后的生成环境
#
#      打包后的生产环境,资源文件都放在sys._MEIPASS目录下
#      修改main.spec中的datas,
#      如datas=[(‘res‘, ‘res‘)],意思是当前目录下的res目录加入目标exe中,在运行时放在零时文件的根目录下,名称为res

def resource_path(relative_path):
    if getattr(sys, ‘frozen‘, False):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

filename = resource_path(os.path.join("res","a.txt"))
print(filename)

with open(filename) as f:
    lines = f.readlines()
    print(lines)
    f.close()

res/a.txt

1 2 3
4 5 6

打包流程

  1. 生成main.spec文件:pyi-makespec -F test.py
  2. 修改mian.spec文件,如下
  3. pyinstaller -F main.spec
# -*- mode: python -*-

block_cipher = None

a = Analysis([‘main.py‘],
             pathex=[‘C:\\Users\\xxx\\PycharmProjects\\Test‘],
             binaries=[],
             datas=[(‘res‘, ‘res‘)], //重点
             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=‘main‘,
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

pyinstall遇到的问题

描述:

Traceback (most recent call last):
  File "C:\Python\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Python\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\10223394\PycharmProjects\Test\venv\Scripts\pyinstaller.exe\__main__.py", line 9, in <module>
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\__main__.py", line 111, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\__main__.py", line 63, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\build_main.py", line 838, in main
    build(specfile, kw.get(‘distpath‘), kw.get(‘workpath‘), kw.get(‘clean_build‘))
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\build_main.py", line 784, in build
    exec(text, spec_namespace)
  File "<string>", line 32, in <module>
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\api.py", line 424, in __init__
    strip_binaries=self.strip, upx_binaries=self.upx,
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\api.py", line 196, in __init__
    self.__postinit__()
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 158, in __postinit__
    self.assemble()
  File "c:\users\10223394\pycharmprojects\test\venv\lib\site-packages\PyInstaller\building\api.py", line 273, in assemble
    pylib_name = os.path.basename(bindepend.get_python_library_path())
  File "C:\Python\lib\ntpath.py", line 214, in basename
    return split(p)[1]
  File "C:\Python\lib\ntpath.py", line 183, in split
    p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType

解决办法:

  这是个已知的故障,官方已经修改,但是没有正式的版本支持。下载https://github.com/Loran425/pyinstaller/tree/14b6e65642e4b07a4358bab278019a48dedf7460中PyInstaller里的bindepend.py文件,然后替换掉本地安装包里的bindepend.py文件即可。

原文地址:https://www.cnblogs.com/chusiyong/p/12052930.html

时间: 2024-11-05 15:55:49

pyinstall打包资源文件的相关文章

pyinstaller打包资源文件及包含eyed3模块时提示找不到libmagic处理

这两天用python写了个小工具,用到了eyed3,用pyinstaller打包时提示找不到libmagic 版本信息: python 3.6.5 pyInstaller 3.4 python-magic-bin 0.4.14 eyeD3 0.88 wxpython 4.0.3 eyeD3 在Windows下使用时,文件名带有中文时乱码,提示找不到文件,解决办法(magic.py 230行左右): if is_unicode: return filename.encode('utf-8') el

maven打包资源文件(转)

原文链接:http://blog.csdn.net/u012849872/article/details/51035938 maven工程标准目录结构: src    -main       –bin 脚本库       –java java源代码文件       –resources 资源库,会自动复制到classes目录里       –filters 资源过滤文件       –assembly 组件的描述配置(如何打包)       –config 配置文件       –webapp

Pyqt 打包资源文件

用打包工具将做好的Pyqt程序打包成exe后发现引用的资源图片都显示不了? 是否遇到了和我一样的问题呢.google之后找到了方法,一种方法是在程序中引用外部资源,另外一种方法是将资源文件转换为py文件,然后引用py.下面我们详细来实现后者方法实现的过程 一. 生成资源文件 要把资源文件转换为py文件首先要有资源文件,我们打开Qt Designer,添加资源文件 保存好资源文件后缀是以 .qrc  结尾的,用notepad++查看.qrc文件发现该文件其实为XML 1 <RCC> 2 <

Webpack 使用url-loader和file-loader打包资源文件

在js中不仅可以通过import引入js文件,还可以引入图片.视频等资源文件,这样webpack打包时就会把所引入的资源文件也一起打包进来 打包进来的文件会返回一个字符串:即文件的路径 要做到这一点,需要一个工具,file-loader,使用方法很简单那 1. 安装 npm install file-loader --save-dev 2. 配置 { test: /\.(png|jpg|jpeg|gif)$/, use: [ { loader: 'file-loader', options: {

关于Laravel中使用Laravel-mix打包资源文件的一个坑

今天在尝试把写了一周的项目用laravel-mix中的 mix.version() 命令生成版本化文件时,遇到了一个报错,大概长这样: fs.js:675 return binding.read(fd, buffer, offset, length, postion); ^ Error: EISDIR: illegal operation on a directory, read at Object.fs.readSync (fs.js:675:18) at ..... 一开始还以为哪里写错了,

用pyinstall打包.py文件

基本方法: pyinstall -F -w -i ico.ico example.py 具体参数: General Options -h, --help show this help message and exit -v, --version Show program version info and exit. --distpath DIR Where to put the bundled app (default: ./dist) --workpath WORKPATH   Where t

打包资源文件到程序

#include <stdio.h> #include <stdlib.h> void FileToArray(const char *srcfile, const char *dstfile) { FILE *file = fopen(srcfile, "rb"); if (file) { FILE *save = fopen(dstfile, "w"); fseek(file, 0, SEEK_END); unsigned int fil

spring/boot 打包,资源/配置/业务文件分离

spring/boot打包,将业务jar包和资源配置文件进行分离打包,打包后的资源在target/release文件夹下面 注意:添加以下配置后,注意修改自己的入口类 <!--相关编译打包依赖--> <build> <plugins> <!--打包jar--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-p

Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤

资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在资源文件中的名称->类型->实际文件名称. 例如:要将文件名 demo.Dll的文件打包成一个资源文件,首先 新建一个文本文档,输入内容 mydemoDll RCDATA demo.DLL mydemoDll 和 RCDATA 你可以随便写,这个是为了在使用资源时定义的名称和类型你也可以写成:a