正常执行的python,打包之后会出现
FileNotFoundError: [Errno 2] No such file or directory: ‘C:\Users\MYEARN~2\AppData\Local\Temp_MEI530482`docxcompose\templates\custom.xml`’
Traceback (most recent call last):
File "docxcompose\properties.py", line 103, in init
File "docx\opc\package.py", line 139, in part_related_by
File "docx\opc\rel.py", line 63, in part_with_reltype
File "docx\opc\rel.py", line 116, in _get_rel_of_type
KeyError: "no relationship of type 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties' in collection"
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "SAP后处理718.py", line 1906, in
File "SAP后处理718.py", line 1895, in combine_all_docx
File "docxcompose\composer.py", line 53, in append
File "docxcompose\composer.py", line 61, in insert
File "docxcompose\properties.py", line 105, in init
File "docxcompose\properties.py", line 111, in part_template
File "pkg_resources_init.py", line 1166, in resource_string
File "pkg_resources_init_.py", line 1412, in get_resource_string
File "pkg_resources_init_.py", line 1579, in _get
File "PyInstaller\loader\pyimod02_importers.py", line 197, in get_data
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\MYEARN~2\AppData\Local\Temp\_MEI530482\docxcompose\templates\custom.xml'
PyInstaller
打包时没有正确地包含 docxcompose
包中的一些资源文件。
应该是一个常见错误。网络有相关案例和解决方案
在这个错误中,docxcompose
在运行时试图加载 custom.xml
,这是一个它需要的模板文件,但是在打包的应用程序中找不到这个文件。
爬坑3:doccompose模板文件找不到
http://www.360doc.com/content/22/0701/07/18334519_1038164959.shtml
Pyinstaller 打包发布经验总结
https://blog.csdn.net/weixin_42052836/article/details/82315118
PyInstaller 的命令,以便将特定路径的数据文件包含进你的 Python 程序打包成的单一可执行文件中
解决办法:
找到docxcompose\templates\custom.xml文件所在的位置,通过–add-data 参数添加到打包文件中。另外也可以使用spec文件,更强大,更灵活。可以参考传送门。
pyinstaller -Fw --add-data C:\work\docxcompose\templates\*.*;docxcompose\templates\.
pyinstaller -Fw --add-data "C:\myproject\mydata\*.*;mydata\" myscript.py
参数解析
--add-data
选项被用来指定额外
的数据文件或目录,格式是 SRC;DEST
或 SRC:DEST
,取决于操作系统。
在 PyInstaller 命令行参数中,-F
和 -w
分别代表以下含义:
-F
或 --onefile
: 创建一个单一的可执行文件。如果没有这个选项,PyInstaller 会创建一个包含许多文件和目录的目录(包括一个主执行文件和许多依赖文件)。
-w
或 --windowed
: 用于指定程序是一个 GUI 应用,而不是命令行应用。这个选项会阻止 Python 在运行程序时打开一个控制台窗口。
因此,-Fw
实际上是两个选项的组合,指示 PyInstaller 创建一个单一的可执行文件,并且不应该打开一个控制台窗口。这对于 GUI 应用是常见的设置。
注意,你也可以把这两个选项分开写,比如 -F -w
,效果是一样的。
C:\work\docxcompose\templates\*.*
docxcompose\templates\
对于本实例
pyinstaller -Fw --add-data "C:\Users\myearning\AppData\Roaming\Python\Python310\site-packages\docxcompose\templates\*.*;docxcompose\templates" SAP后处理718.py
注意,确保使用正确的路径分隔符和列表分隔符。在 Windows 上,路径分隔符是 \
,列表分隔符是 ;
打开 .spec
文件:.spec文件(在这个例子中,它应该名为
SAP后处理718.spec)包含了 PyInstaller 打包你的程序所需的所有信息。找到
a = Analysis(…)这一行,确保
datas` 参数包含了你要添加的数据文件。它应该看起来像这样:
a = Analysis(
['SAP后处理718.py'],
pathex=[],
binaries=[],
datas=[('C:\\Users\\myearning\\AppData\\Roaming\\Python\\Python310\\site-packages\\docxcompose\\templates\\*.*', 'docxcompose\\templates')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
重新打包:保存 .spec
文件,然后运行 pyinstaller SAP后处理718.spec
来重新打包你的程序。
运行 pyinstaller
命令并将 .spec
文件作为参数:
pyinstaller SAP后处理718.spec