19

我正在尝试通过执行从源代码构建一个包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我发现它们安装在如下奇怪的路径中:

在此处输入图像描述

4

4 回答 4

12

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

setup(
    options = {
            "py2exe":{
            ...
            "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"],
            ...
        }
    },
    console = [{'script': 'program.py'}]
)
于 2012-08-28T06:16:00.713 回答
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并将它们作为数据文件复制到您的包中。

有关更多信息,请参阅py2exe 教程

于 2012-08-28T08:12:22.270 回答
0

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

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

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

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

于 2012-09-01T23:12:04.770 回答
0

我曾经在 Windows 上遇到过很多复杂问题,例如您面临的问题以及使用pip install cython.

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

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

于 2012-09-02T00:21:25.167 回答