【问题标题】:Error: "MSVCP90.dll: No such file or directory" even though Microsoft Visual C++ 2008 Redistributable Package is installed错误:“MSVCP90.dll:没有这样的文件或目录”,即使安装了 Microsoft Visual C++ 2008 Redistributable Package
【发布时间】:2012-08-26 05:37:46
【问题描述】:

我正在尝试通过执行python setup.py py2exe从源代码构建一个包

这是 setup.py 中的代码部分,我想是相关的:

if sys.platform == "win32": # For py2exe.
    import matplotlib
    sys.path.append("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT")
    base_path = ""
    data_files = [("Microsoft.VC90.CRT", glob.glob(r"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*")),

它显示的错误:

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory

但我已经安装了“Microsoft Visual C++ 2008 Redistributable Package”。我在 64 位 Windows 8 上运行 32 位 python。我正在尝试构建 32 位二进制文​​件.

也没有这样的文件夹:“C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\”。这是我的计算机包含的内容:

编辑:

在我的 C:\ 驱动器上搜索 msvcp90.dll 时,我发现它们安装在如下奇怪的路径中:

【问题讨论】:

标签: python visual-c++ python-2.7 py2exe


【解决方案1】:

我建议完全忽略依赖关系。将MSVCP90.dll 添加到dll_excludes 列表中,作为py2exe 的选项提供。用户必须安装 Microsoft Visual C++ 2008 可再发行组件。一个例子:

setup(
    options = {
            "py2exe":{
            ...
            "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"],
            ...
        }
    },
    console = [{'script': 'program.py'}]
)

【讨论】:

  • VS2008 可再发行?那是我需要安装的一些新软件包吗?
  • 对不起,我的意思是 Visual C++ 2008 redist 包。我会编辑修复。
  • 如果这是microsoft.com/en-us/download/details.aspx?id=29。然后我安装它并一次又一次地修复它。问题依然存在
  • 您(作为打包者)可以使用dll_excludes 解决问题。您的用户(作为软件包的接收者)需要在使用该程序之前安装 redist。使用 dll_excludes 应该会阻止 py2exe 查找 DLL。
  • @claws 而不是发送 dll,您可以发送可再发行安装程序并提示用户安装它。
【解决方案2】:

(新答案,因为另一个答案描述了另一种解决方案)

您可以从 WinSxS 目录中获取文件并将它们复制到 C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT 目录(通常由 Visual Studio 创建,您没有)。复制它们得到以下结构:

  +-Microsoft.VC90.CRT
  | |
  | +-Microsoft.VC90.CRT.manifest
  | +-msvcm90.dll
  | +-msvcp90.dll
  | +-msvcr90.dll

然后,您应该能够运行安装程序(仍然不包括msvcp90.dll,如另一个答案),它应该成功找到Microsoft.VC90.CRT 下的文件并将它们作为数据文件复制到您的包中。

更多信息请参见the py2exe tutorial

【讨论】:

    【解决方案3】:

    我曾经在 Windows 上遇到大量复杂问题,例如您面临的问题以及使用 pip install cython 安装 Cython 等软件包。

    经过两周的痛苦后,最适合我的解决方案是下载并运行 Windows 提供的非官方 MinGW GCC 二进制文件 here。您可能想尝试一下,看看是否有帮助。

    如果你这样做了,如果你已经安装了 MinGW,你可能想要卸载它。我不知道这是否是绝对必要的,但我总是这样做以防万一。我确实将它与 Cygwin 并排安装,没有任何问题。

    【讨论】:

      【解决方案4】:

      我认为这与目录中的空格有关。您应该尝试使用.rstrip()。例如,这样写:

      directory='C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT'
      directory=directory.rstrip()
      

      然后您可以像使用实际路径一样使用变量目录。

      这应该使 python 能够识别它以前无法破译的目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2019-02-20
        • 2016-02-10
        • 2019-10-07
        • 2017-01-02
        • 1970-01-01
        相关资源
        最近更新 更多