Python的docx模块在创建.exe时给出AsserError

Python的docx模块在创建.exe时给出AsserError,python,py2exe,assertion,python-docx,Python,Py2exe,Assertion,Python Docx,我有一个名为my_Python_file.py的Python文件,它使用Python docx模块生成一个.doc文件。.doc创建得非常完美,没有任何问题。当我为我的脚本构建一个.exe并尝试生成.doc时,问题就出现了。出现断言错误问题 这是我的exe maker代码exe_maker.py: 似乎将python脚本移动到其他位置会产生错误 File "docx.pyc", line 1063, in savedocx AssertionError 这是savedocx行: saved

我有一个名为my_Python_file.py的Python文件,它使用Python docx模块生成一个.doc文件。.doc创建得非常完美,没有任何问题。当我为我的脚本构建一个.exe并尝试生成.doc时,问题就出现了。出现断言错误问题

这是我的exe maker代码exe_maker.py:

似乎将python脚本移动到其他位置会产生错误

  File "docx.pyc", line 1063, in savedocx
AssertionError
这是savedocx行:

savedox编写良好,因为它不是.exe文件时可以正常工作

如何使docx模块正常工作?当我创建exe时,是否还要添加任何其他路径/变量


提前感谢

我通过编辑系统Python文件夹中docx egg folder的api.py文件解决了这个问题

更改此选项:

_thisdir = os.path.split(__file__)[0]
_default_docx_path = os.path.join(_thisdir, 'templates', 'default.docx')
为此:

thisdir = os.getcwd()
_default_docx_path = os.path.join(thisdir, 'templates', 'default.docx')
第一个是获取实际运行的程序并将其添加到路径中以定位templates文件夹。 C:\myfiles\myprogram.exe\templates\default.docx

解决方案只采用路径,而不采用正在运行的程序。
C:\myfiles\templates\default.docx

与更改某些库文件相比,我发现显式告诉python docx在何处查找模板更容易、更清晰,即:

document = Document('whatever/path/you/choose/to/some.docx')

这有效地解决了py2exe和docx路径问题。

引发断言错误的行是什么?另外,代码是在GitHub上还是在我可以检查的地方?恐怕这里没什么可谈的。还要注意,PostWord2007文件的扩展名是.docx,而不是旧的.doc。我还看到PIL或Pillow不在依赖项列表中。我添加了savedoc的行,但正如我在问题上所说的,这不是savedoc行的编程问题,因为当.exe未生成时,它可以完美地工作。提前谢谢。对不起,波佳,我不知道。对于了解py2exe的人来说似乎是个问题。我能想到的唯一值得一试的事情是,看看在新的python docx重写中是否进行了交换,并看看这是否有效。API是不同的,因此您的.docx构建代码需要更改,但是如果您只是尝试一个简单的三行.docx文件构建,看看py2exe是否喜欢:哦,这有点有趣。这两个包的一个共同点是它们有一些包数据,这些文件在运行时像数据一样被读入。它们是模板文档,是使用例如document=document创建新Word文档时的默认起始位置。这另一个SO答案可能会有所帮助:,而且搜索“py2exe包数据”似乎会出现很多。我不熟悉py2exe行为Borja,但从我快速阅读的内容来看,如果它能够工作,您可能会想要这样的东西:data_files=['docx/template',['C:/Python…2.7.egg/docx/templates/*']。但我担心这确实是一个py2exe问题,而且我对该软件包没有专业知识。
thisdir = os.getcwd()
_default_docx_path = os.path.join(thisdir, 'templates', 'default.docx')
document = Document('whatever/path/you/choose/to/some.docx')