Python 错误:";MSVCP90.dll:没有这样的文件或目录;即使Microsoft Visual C++;已安装2008可再发行软件包

Python 错误:";MSVCP90.dll:没有这样的文件或目录;即使Microsoft Visual C++;已安装2008可再发行软件包,python,visual-c++,python-2.7,py2exe,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 = ""

我正试图通过执行
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
<> > >但我安装了“微软Visual C++ 2008可重分发包”。<强>我在64位Windows 8上运行32位Python。我正在尝试构建一个32位二进制文件

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

编辑:

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


我建议完全忽略依赖关系。将
MSVCP90.dll
添加到
dll\u排除的列表中
作为
py2exe
的一个选项。用户将不得不安装微软Visual C++ 2008可重分发。例如:

setup(
    options = {
            "py2exe":{
            ...
            "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"],
            ...
        }
    },
    console = [{'script': 'program.py'}]
)
(新答案,因为另一个答案描述了替代解决方案)

您可以从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
下找到文件,并将它们作为数据文件复制到您的包中


有关更多信息,请参阅。

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

directory='C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT'
directory=directory.rstrip()
然后可以像使用实际路径一样使用变量目录


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

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

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


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

这些链接可能会有帮助:此代码是否成功:
导入ctypes;lib=ctypes.windell('msvcp90.dll')
@DavidHeffernan:是的,这段代码在pythonshell(IDLE)中成功。在执行代码之后,如果我运行“>>>lib”,它会说py2exe看起来很时髦,那么我想它会在SxS缓存中。我对py2exe一无所知。对不起,VS2008可再发行吗?这是我需要安装的新软件包吗?抱歉,我是说Visual C++ 2008 ReDIST包。我将编辑以修复。如果是这样的话。然后我一次又一次地安装和修理它。但问题仍然存在,您(作为包装商)可以使用
dll\u排除
解决问题。您的用户(作为软件包的接收者)需要在使用该程序之前安装redist。使用
dll\u excludes
应该可以阻止py2exe查找dll。@claws您可以发送可再发行的安装程序并提示用户安装,而不是发送dll。