【问题标题】:Does python depends on microsoft visual c++ redistributable?python是否依赖于microsoft visual c++ redistributable?
【发布时间】:2020-01-22 18:12:46
【问题描述】:
  1. python 是否需要 microsoft visual c++ redistributable 才能运行代码?

我正在使用 pyinstaller 将我的 .py 代码编译成 exe。在某些系统中,我的 exe 要求运行 microsoft visual c++ redistributable package。

  1. pyinstaller 在制作 exe 时是否包含 microsoft visual c++ 可再发行文件?如果不是,我如何包含这些文件,这样我就不需要将 microsoft visual c++ 可再发行包安装到其他系统来运行我的软件?

  2. 在 python 中构建独立软件的其他替代方法是什么?我正在阅读与 python 一起使用其他语言。

  3. 看到electron js和python可以一起做桌面应用。但是我将如何将该应用程序作为独立的 exe 分发?

【问题讨论】:

    标签: python electron pyinstaller


    【解决方案1】:

    Python 本身不依赖于 MSVC 的存在。你可以下载一个可移植的 Python 包,它会在你复制它的任何地方运行。这些是来自https://www.python.org/downloads/windows/embeddable

    但是,内部带有本机扩展代码的 Python 模块可以在多个级别上依赖 MSVC:

    • 如果原生部分是二进制格式(Windows 上的.pyd 文件),实际上是.dll,它可能依赖于其他.dll-s,这取决于它是如何构建的
    • 如果本机部分是 C/C++ 源代码,它将在安装时构建,通常通过“setup.py”,此过程需要在系统上安装 C 编译器

    PyInstaller 是另一回事。首先,它有一个您可能想要阅读的文档。例如,What PyInstaller Does and How It Does It 页面清楚地直接回答了您的至少一个问题:

    捆绑到一个文件

    PyInstaller 可以将您的脚本及其所有依赖项捆绑到一个名为 myscript(Windows 中为myscript.exe)的可执行文件中。

    还有一个已知兼容性和已知兼容性问题的软件包列表:https://github.com/pyinstaller/pyinstaller/wiki/Supported-Packages,根据您需要的软件包,您可能会发现它很有用。

    虽然它不是重复的,但这个问题:How to package a linked DLL and a pyd file into one self contained pyd file?(以及它链接的另一个问题)可能会很有趣。

    【讨论】:

      【解决方案2】:

      当然 Python 需要 MSVC Redistributable,任何使用标准库函数的本地 Windows 程序都需要它。显然,Python 使用了很多它们,并且应该为所有扩展模块提供一致的环境。

      不过,由于 Python 3.5 it is bundled with an installer,所以不需要手动安装。 3.5 之前的 Python 安装程序不包含它,我无法找到任何说明,无论它是否在安装期间下载。

      默认情况下,Python 还强制执行 extension modules to be compiled with the same(或自 3.5 起兼容)version of MSVC as an interpreter itself。因此,除了一些非常罕见的情况外,扩展模块也将使用相同的可再发行组件。


      @tevemadar 引用的“可嵌入”Python 版本不是“便携式 Python”!以下是documentation 对其用法的说明:

      它旨在充当另一个应用程序的一部分,而不是由最终用户直接访问。

      注意:嵌入式发行版不包括 Microsoft C 运行时,应用程序安装程序有责任提供此功能。运行时可能已经预先安装在用户的系统上或通过 Windows 更新自动安装,并且可以通过在系统目录中找到 ucrtbase.dll 来检测。

      但如果你使用 PyInstaller,你仍然不需要它们。


      要检查您的.exe 文件中是否包含可再发行文件,您可以使用任何存档软件打开它并亲自查看。我的猜测是,至少如果 Python 安装在单用户模式下,它们可以包含在内,在这种情况下 they're installed in the Python directory 也是如此。

      不过,除此之外,您真的应该单独提出问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        • 2010-11-15
        相关资源
        最近更新 更多