pyinstaller打包报错(qt-material)

博客讲述了在使用PyInstaller打包含有qt-material库的程序时遇到的错误,该错误涉及Path对象缺少home属性。解决方案包括:一是修改generate.py文件,注释掉Path.home()并替换为用户实际家目录;二是手动将qt-material资源复制到打包后的文件根目录。此外,还提供了相关代码片段和资源管理类的详细实现。
摘要由CSDN通过智能技术生成

在程序中,用到了qt-material库,IDE中一切正常,使用pyinstaller打包时,报错如下:

报错说是Path没有home属性,经过查找,找到了qt-material安装包resource目录下有一个generate.py文件,在文件中使用了pathlib库,源文件代码如下,这时候把Path.home()一行注释掉,写自己用户的家目录即可,他会到家目录下的.qt-material获取文件,注意,不是每台电脑都会出现这个问题,出现问题后按照说明修改就好

第二种解决办法就是,程序打包完成后,将qt-material目录中的文件手动拷贝到打包后的文件的根目录也可以,拷贝的资源如下,放在qt-material目录下即可

 

discover_hook_directories: Failed to process hook entry point 'hook-dirs = qt_material:get_hook_dirs': type object 'Path' has no attribute 'home'

import os
import shutil
from pathlib import Path

HOME = Path.home()
RESOURCES_PATH = os.path.join(HOME, '.qt_material')


########################################################################
class ResourseGenerator:
    """"""

    # ----------------------------------------------------------------------
    def __init__(self, primary, secondary, disabled, source, parent='theme'):
        """Constructor"""

        if parent.startswith('/'):
            self.index = parent
        if parent.startswith('.'):
            self.index = parent[1:]
        else:
            self.index = os.path.join(RESOURCES_PATH, parent)

        self.contex = [
            (os.path.join(self.index, 'disabled'), disabled),
            (os.path.join(self.index, 'primary'), primary),
        ]

        self.source = source
        self.secondary = secondary

        for folder, _ in self.contex:
            shutil.rmtree(folder, ignore_errors=True)
            os.makedirs(folder, exist_ok=True)

    # ----------------------------------------------------------------------

    def generate(self):
        """"""
        for icon in os.listdir(self.source):
            if not icon.endswith('.svg'):
                continue

            with open(os.path.join(self.source, icon), 'r') as file_input:
                content_original = file_input.read()

                for folder, color in self.contex:
                    new_content = self.replace_color(content_original, color)
                    new_content = self.replace_color(
                        new_content, self.secondary, '#ff0000')

                    file_to_write = os.path.join(folder, icon)
                    with open(file_to_write, 'w') as file_output:
                        file_output.write(new_content)

    # ----------------------------------------------------------------------
    def replace_color(self, content, replace, color='#0000ff'):
        """"""
        colors = [color] + [''.join(list(color)[:i] +
                                    ['\\\n'] + list(color)[i:]) for i in range(1, 7)]
        for c in colors:
            content = content.replace(c, replace)

        replace = '#ffffff00'
        color = '#000000'
        colors = [color] + [''.join(list(color)[:i] +
                                    ['\\\n'] + list(color)[i:]) for i in range(1, 7)]
        for c in colors:
            content = content.replace(c, replace)

        return content
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值