Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么使用xlwings或openpyxl的pyinstaller可执行文件比xlrd大30倍_Python_Excel_Pyinstaller_Xlrd_Xlwings - Fatal编程技术网

Python 为什么使用xlwings或openpyxl的pyinstaller可执行文件比xlrd大30倍

Python 为什么使用xlwings或openpyxl的pyinstaller可执行文件比xlrd大30倍,python,excel,pyinstaller,xlrd,xlwings,Python,Excel,Pyinstaller,Xlrd,Xlwings,我正在使用Python3.7(Anaconda安装)处理Excel文件以创建Word文档 我使用xlwings和pythondocx编写了一个脚本文件来实现这一点,在python环境中执行脚本时,该脚本文件可以正常工作。但是,当尝试为使用Pyinstaller的用户创建可执行文件(更具体地说是自动py到exe)时,它会生成一个非常大的可执行文件(>300 mb),创建exe和运行exe文件需要很长时间 我使用PythonDocX和xlrd、openpyxl或xlwings创建了3个测试脚本,以创

我正在使用Python3.7(Anaconda安装)处理Excel文件以创建Word文档

我使用xlwings和pythondocx编写了一个脚本文件来实现这一点,在python环境中执行脚本时,该脚本文件可以正常工作。但是,当尝试为使用Pyinstaller的用户创建可执行文件(更具体地说是自动py到exe)时,它会生成一个非常大的可执行文件(>300 mb),创建exe和运行exe文件需要很长时间

我使用PythonDocX和xlrd、openpyxl或xlwings创建了3个测试脚本,以创建word文档,从测试文件“testEXCEL.xlsx”读取单个单元格,并将其写入/保存到word文档中

XLRD测试:9 mb文件

#Using auto-py-to-exe single file produces 9 mb exe file
from docx import Document
import xlrd

document = Document()
document.add_paragraph('Testing')

wb = xlrd.open_workbook('testEXCEL.xlsx')
ws = wb.sheet_by_index(0)
testvalue = ws.cell_value(0,0)

document.add_paragraph(testvalue)
document.save('testDOCX_xlrd.docx')
XLWINGS测试:329 mb

#Using auto-py-to-exe single file produces 329 mb exe file
from docx import Document
import xlwings as xw

document = Document()
document.add_paragraph('Testing')

wb = xw.Book('testEXCEL.xlsx')
ws = wb.sheets.active
testvalue = ws.range('A1').value

document.add_paragraph(testvalue)
document.save('testDOCX_xlwings.docx')
OPENPYXL测试:329 mb文件

#Using auto-py-to-exe single file produces 9 mb exe file
from docx import Document
import xlrd

document = Document()
document.add_paragraph('Testing')

wb = xlrd.open_workbook('testEXCEL.xlsx')
ws = wb.sheet_by_index(0)
testvalue = ws.cell_value(0,0)

document.add_paragraph(testvalue)
document.save('testDOCX_xlrd.docx')
#Using auto-py-to-exe single file produces 329 mb exe file
from docx import Document
from openpyxl import load_workbook

document = Document()
document.add_paragraph('Testing')

wb = load_workbook('testEXCEL.xlsx')
ws = wb.active
testvalue = ws.cell(1,1).value

document.add_paragraph(testvalue)
document.save('testDOCX_openpyxl.docx')
XLRD版本创建exe需要<2分钟,执行文件需要几秒钟。 OPENPYXL和XLWINGS版本创建exe大约需要20分钟,执行文件需要一分钟以上

这些简单测试中的所有3个可执行文件都正常工作

对于这样一个简单的示例,为XLWINGS创建可执行文件、文件大小和运行时间的时间似乎非常长

有人能解释这种行为吗? 有没有一种方法可以使用XLWINGS或以更好的性能获得大小更合理的可执行文件


提前谢谢。

我想您使用的是单文件模式,对吗?因此,如果有许多文件/共享库,那么在执行脚本之前,必须将它们提取到临时目录中。您可以创建一个单目录解决方案,并将其与一个小型安装程序打包。这应该执行得更快。如果库有太多的依赖项,那么编译时间会很长。我想你可以引导pyinstaller忽略某些文件,如果你确定你不需要它们的话。@gelonida我在原始文章中使用的是单文件模式。转到一个目录确实会将创建可执行文件的时间加快大约一半,并且可执行文件的运行时间更快(不是很快,lol)。文件夹大小也从325 mb的openpyxl和xlwings增加到了约900 mb。xlwings版本会导致excel文件物理打开而不关闭,这是python脚本或单个文件可执行文件所没有的。我对pyinstaller没有足够的了解,不知道我可以忽略哪些文件(关于该主题的任何参考?)。奇怪!通常情况下,一种文件模式不如一种目录模式可靠,反之亦然。如果您管理的一个非常小的示例在onedirmode下失败,并且使用单文件模式工作,那么您可以将其发布到pyinstaller团队。关于要删除哪些文件?不知道,但是您可以尝试查找目录中最大的文件,将其移开,然后查看您的脚本是否仍然有效。但如果我了解到onedirmode目前还不能完全运行。