错误:“MSVCP90.dll:没有这样的文件或目录”即使安装了Microsoft Visual C ++ 2008 Redistributable Package

时间:2012-08-26 05:37:47

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

我正在尝试通过执行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 \”。这就是我的电脑所包含的内容:

enter image description here

修改

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

enter image description here

4 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:3)

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

您可以从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

答案 2 :(得分:0)

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

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

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

这应该让python能够识别以前无法解密它的目录。

答案 3 :(得分:0)

我以前在Windows上出现了很多关于复杂化的问题,比如你面临的问题以及使用pip install cython安装像Cython这样的软件包。

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

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