cx_freeze include_msvcr 不捆绑 windows VC2015 运行时

Posted

技术标签:

【中文标题】cx_freeze include_msvcr 不捆绑 windows VC2015 运行时【英文标题】:cx_freeze include_msvcr does not bundle windows VC2015 runtime 【发布时间】:2017-02-28 19:04:57 【问题描述】:

我正在使用 python 3.5.2 在 Windows 上构建我的应用程序,我构建了安装了 VC++ Redistributable 2015.24021 的 python。

而且我不希望客户必须自己安装 redist,所以我认为 cx_freeze include_msvcr 选项可能是要走的路。但是,即使我使用 include_msvcr 选项,.exe 仍然无法在没有 redist 的 Windows 上执行。

我可以看到有一个 VCRUNTIME140.dll 是从我构建的 python 3.5.2 复制的,并且在没有 redist 的机器上执行它会抱怨缺少 api-ms-win-crt-stdio-l1-1-0.dll .

我可以在我的构建机器上找到这个 .dll 文件,所以这里有一些简单的问题。

    是否预计 include_msvcr 不会像上述那样捆绑依赖的 .dll 文件? 有什么解决方法吗?喜欢将 dll 添加到 include_files 中吗?我应该把 dll 放在哪里?

非常感谢。

【问题讨论】:

我尝试使用 include_files 包含我可以使用 Dependency Walker 找到的所有 DLL,但程序仍然拒绝运行,说某些 DLL 加载失败。非常感谢任何帮助。 刚刚在 Python 3.6 和 cx_freeze 中遇到了同样的问题 【参考方案1】:

有同样的问题 - dll 被复制过来,但在运行时仍然出现 VCRUNTIME140.dll missing 错误。

添加选项 'add_to_path': True 为我修复了它。

options = 
    'build_exe':
        'include_msvcr': True,
        'packages':['dde', 'win32ui', 'multiprocessing', 'idna'],
        'add_to_path': True
    

【讨论】:

【参考方案2】:

我在一些构建中发现了同样的问题;一个构建顺利,另一个没有。

所以经过一番搜索,我发现添加import requests突然在之前错误的构建中添加了pywintypes36.dllVCRUNTIME140.dll

不知道为什么,我不会说添加这个导入是一个确定的解决方案,但是某些包(例如 requests)似乎可以缓解 cx_Freeze 的依赖检测。

【讨论】:

以上是关于cx_freeze include_msvcr 不捆绑 windows VC2015 运行时的主要内容,如果未能解决你的问题,请参考以下文章

cx_Freeze 不工作 - 没有名为 cx_Freeze 的模块

cx_freeze 不导入外部模块

cx_Freeze 错误:基线图像目录不存在

cx_Freeze 不包含子目录中的 .py 文件

cx_freeze 不允许我用 librosa Python3 制作 gui

cx_Freeze '@rpath/libQtDeclarative.4.dylib':不存在或不是常规文件