如何在Python CXY-FILE应用程序中包含微软Visual C++可重新分配包

2024-03-28 19:07:43 发布

您现在位置:Python中文网/ 问答频道 /正文

上下文

我正在尝试使用cx_freeze构建一个python tkinter应用程序,并且成功地构建了.exe。这是我的setup.py:

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或更高版本进行编译(请参见documentation)。我在我的电脑上有Visual Studio 2019,所以所有的东西都很好,但是我试着在另一个Windows电脑上运行这个应用程序,它只有微软Visual C++ 2010可再分发软件包(我猜这2010个编译工具),并且在这个主要错误发生之前,应用程序崩溃了:

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

基于讨论{{a2},我认为这个错误意味着VisualStudio需求不满足(即2015或更高),如在这个{a3}结尾所示,MatpTrLIB轮子不包括版本的C++运行时DLL。3.3.0. 在问我的问题之前,我必须说我对Python库是如何编译的或是什么轮子的理解非常有限,甚至不知道在编译我的应用程序时涉及到哪些C++运行时DLL。p>

问题

如何在我的应用程序中包括微软Visual C++ 2015可重分发包(假设是合法的)?p>

一个简单的解决方案是在我的项目中包含所有必要的依赖项而不需要用户在其计算机上安装VisualStudioC++ 2015 +版本,所以如果您对如何用CXILITEN或其他一些工具来实现这一点我有任何想法,我先感谢您的帮助。p>

保罗

附言:正如您所见,我尝试了build_exe_选项中的"include_msvcr"键,但这并没有解决我的问题(另外,我认为默认情况下包括msvcp.dll)

更新

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


Tags: pybuild版本应用程序baseincludeversionsetup
1条回答
网友
1楼 · 发布于 2024-03-28 19:07:43

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

您必须复制所有DLL

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

Dependencies

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

相关问题 更多 >