pyinstaller --onefile 生成0KB exe

Posted

技术标签:

【中文标题】pyinstaller --onefile 生成0KB exe【英文标题】:pyinstaller --onefile generates 0KB exe 【发布时间】:2020-12-17 08:30:50 【问题描述】:

我编写了一个 python 脚本,它将文件夹中存在的所有 pdf 转换为 docx(在 wincom 包(pywin32)的帮助下)。如果我只在我的 windows10 x64 机器上运行 python 脚本,脚本可以正常工作,但是当我通过“pyinstaller --onefile pdf2docx.py”生成 exe 时,它​​最初会生成一个大小(11MB)的 exe,但是一旦 exe 完全生成它变成 0 KB。

这是我的代码

import os, json, traceback, sys, shutil
import win32com.client
from datetime import datetime
from inspect import currentframe

# Global Variables
logfile = open("log.txt", 'a+')

# Returns Current line number (for Debugging purpose)
def get_linenumber():
    cf = currentframe()
    return "Line No: "+str(cf.f_back.f_lineno)

# Handels Error
def handel_error(line_no = None ,description = None, data = None):
    log(f"Ended with Error(logged in Error.txt): datetime.now()\n'-'*80\n")
    err = traceback.format_exc()
    err_path= f"Error.txt"
    with open(err_path,"a+") as f:
        f.write(f"\ndatetime.now()\n'-'*100\nUnexpected error:\ndescription : data at line_no\nerr\nstr(sys.exc_info())\n")

#  Returns dictionary from json file
def read_config(config):
    with open(config, 'r') as f:
        return json.load(f)

# logs into log(txt format) file
def log(text, file = logfile):
    file.write(f"text\n")

# Converts All pdf files from PDF directory to Word file and place it in DOC directory (Directories are provided in the config.json file)
# If pop-up appears, check the checkbox Don't show again and press ok
def pdf2docx(pdf_dir,docx_dir):
    for fle in os.listdir(pdf_dir):
        pdf = os.path.join(pdf_dir, fle)
        name,ext = os.path.splitext(fle)
        if ext == '.pdf':
            try:
                log(f"Processing : fle")
                wb = word.Documents.Open(pdf)
                out_file = os.path.abspath(f"docx_dir\\name.docx")
                print("Processing: ",fle)
                wb.SaveAs2(out_file, FileFormat=16) # file format for docx
                log("success...")
                wb.Close()
            except:
                handel_error()
        else:
            log(f"Not a pdf file: fle")

if __name__ == "__main__":
    try:
        # Reading the configuration file
        base_dir = os.path.dirname(os.path.abspath(__file__))
        config = read_config(f"base_dir\\config.json")
        pdf_dir = config['pdfs']
        docx_dir = config['docx']
        
        log(f"Started: datetime.now()\n")

        # Converting pdf to word
        word = win32com.client.Dispatch("Word.Application")
        word.visible = 0
        
        pdf2docx(pdf_dir,docx_dir)

        word.Quit()

        log(f"\nEnded: datetime.now()\n'-'*80\n")
    except:
        handel_error()

我更感兴趣的是了解根本原因而不是解决方案。请帮助我并提前致谢。 :)

【问题讨论】:

【参考方案1】:

我发现了问题。

有一个企业应用程序(语义端点保护)阻止 pyinstaller 生成 exe 文件并将其视为有害软件。

在就此事件联系相关团队后,现在它成功生成了exe并且运行良好。

【讨论】:

以上是关于pyinstaller --onefile 生成0KB exe的主要内容,如果未能解决你的问题,请参考以下文章

使用 onefile 选项在 Pyinstaller 中添加数据文件

使用 PyInstaller (--onefile) 捆绑数据文件

使用 PyInstaller 在 --onefile 中使用 QML 构建 PyQt5

在使用 PyInstaller --onefile 打包 kivy 时包含 .kv/.json 文件?

Pyinstaller --onefile 模式,如何在解包前向控制台写入消息

如何将 PortAudio 包含到 pyinstaller onefile 构建中