如何在python cx_freeze应用程序中包含Microsoft Visual C++Redistributabl



上下文

我正在尝试使用cx_freeze构建一个python tkinter应用程序,并成功地构建了.exe

import sys
from cx_Freeze import setup, Executable
version = "0.7.6"
author = "Me"
base = None
if sys.platform == "win32":
base = "Win32GUI"
build_exe_options = {"include_files": ["assets/", "files/"], "excludes": ["matplotlib.tests", "numpy.random._examples"], 
"include_msvcr": True}
setup(
name="Application",
version=version,
description=f"Application {version}",
author=author,
options={"build_exe": build_exe_options},
executables=[Executable(script="main.py", base=base, targetName="App.exe", icon="assets/Logo.ico")]
)

问题识别

但是,我在Python代码中使用的一些库,如matplotlib,只能使用Visual Studio 2015或更高版本进行编译(请参阅文档(。我的电脑上有Visual Studio 2019,所以一切都很好,但我尝试在另一台只有Microsoft Visual C++2010 Redistributable软件包(我猜是2010编译工具(的Windows电脑上运行该应用程序,该应用程序在启动前崩溃,并出现以下主要错误:

ImportError:导入ft2font时DLL加载失败:找不到指定的模块。

根据这里的讨论,我认为这个错误意味着Visual Studio的要求没有得到满足(即2015或更高版本(,正如本讨论结束时所指出的,matplotlib轮子不包括版本>3.3.0.在问我的问题之前,我必须说,我对python库是如何编译的或轮子是什么的理解非常有限,我甚至不知道编译我构建的应用程序涉及哪些C++运行时DLL。

问题

如何在我的应用程序中包含Microsoft Visual C++2015 Redistributable软件包(假设这是合法的(?

对我来说,一个简单的解决方案是在我的项目中包含所有必要的依赖项,而无需用户在其计算机上安装Visual Studio C++2015+版本,因此,如果您对如何使用cx_freeze甚至我可能研究的其他工具实现这一点有任何想法,我提前感谢您的帮助。

Paul

第页。S: 正如你所看到的,我尝试了build_exe_options中的"include_msvcr"密钥,但这并没有解决我的问题(另外,我认为msvcp.dll默认包含在内(

更新

我手动将vcruntime140_1.dll、msvcp140_1.dll包含在目录中,应用程序现在正在启动,但窗口显示不正确,其框架没有出现,因此问题尚未解决。

如果安装了Windows工具包,则应转到C:Program Files (x86)Windows Kits位置并决定合适的python体系结构。如果应用程序为64位,则创建一个位置类型:C:Program Files (x86)Windows Kits10RedistucrtDLLsx64

您必须复制所有DLL。

然而,这可能并不奏效。我建议运行依赖性工具。这将帮助您找到正确的DLL。

依赖

您应该分析pythonVxVx.dll(python38.dll(文件和yourapp.exe文件。

最新更新