凌的博客

您现在的位置是: 首页 > 学无止境 > python > 

python

q5.py(修正windows下pyqt5组件导出无法正常启动的问题)

2020-10-05 python 1243
#! /usr/bin/python
# -*- coding: utf-8 -*-
# author:jatvsjat
# datetime:2019/8/26 17:30
# software: PyCharm


import os, shutil
import re


def convert_path(path):
    seps = r'\/'
    sep_other = seps.replace(os.sep, '')
    return path.replace(sep_other, os.sep)


def list_dir(path):
    dirs = []
    for path, name, filenames in os.walk(path):
        print(path)
        dirs.append(path)

    return dirs


def repairQt5(path):
    bin_path = r'/PyQt5/Qt/bin'
    dst = convert_path(path + bin_path)
    if os.path.exists(dst) is False:
        os.mkdir(dst)

    for file in os.listdir(path):

        try:
            m = re.match("Qt5\w+\.dll", file)
            if m:
                f = os.path.join(path, file)
                d = os.path.join(dst, file)
                shutil.move(f, d)
                print("move: %s -> %s" % (f, d))
        except Exception as e:
            print(str(e))

    print("#====== 修复 pyinstaller 无法正确导入 Qt5 dll组件问题 ======")


def copyapp(conf_files, path, distpath):
    if len(conf_files) > 0:
        for file in conf_files:
            f = os.path.join(path, file)
            d = os.path.join(distpath, file)
            if len(file.split(":\\")) > 1:
                d = os.path.join(distpath, os.path.basename(file))

            if os.path.exists(d) == False:
                if os.path.isdir(f):
                    shutil.copytree(f, d)
                else:
                    shutil.copyfile(f, d)

                print("copy: %s -> %s" % (f, d))
            print("#====== 导入配置文件 ======")


def main():
    path = os.getcwd()
    print(path)
    distpath = os.path.join(path, "dist")
    # 导入 设定的内容
    conf_files = [
        "./data",
    ]

    for dir in os.listdir(distpath):
        dtpath = os.path.join(distpath, dir)
        if os.path.isdir(dtpath):
            # 处理配置文件
            copyapp(conf_files, path, dtpath)
            # 修复 pyinstaller 无法正确导入 Qt5 dll组件问题
            repairQt5(dtpath)


if __name__ == "__main__":
    main()


文章评论

0条评论