为 Python 2.7 构建/安装 C 模块时出错

Posted

技术标签:

【中文标题】为 Python 2.7 构建/安装 C 模块时出错【英文标题】:Errors while building/installing C module for Python 2.7 【发布时间】:2012-11-15 19:01:24 【问题描述】:

我在尝试为 python 安装/编译 ctools 时遇到以下错误(版本信息)

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)] on win32
操作系统:Windows 7 Professional 64 位(Service Pack 1) 已安装:Microsoft Visual C++ 2008 Express Edition

错误:

building 'deap.cTools' extension
Traceback (most recent call last):
  File "setup.py", line 40, in <module>
    cmdclass = 'build_py': build_py
  File "C:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\lib\distutils\command\install.py", line 563, in run
    self.run_command('build')
  File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\lib\distutils\command\build.py", line 127, in run
    self.run_command(cmd_name)
  File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\lib\distutils\command\build_ext.py", line 340, in run
    self.build_extensions()
  File "C:\Python27\lib\distutils\command\build_ext.py", line 449, in build_extensions
    self.build_extension(ext)
  File "C:\Python27\lib\distutils\command\build_ext.py", line 499, in build_extension
    depends=ext.depends)
  File "C:\Python27\lib\distutils\msvc9compiler.py", line 473, in compile
    self.initialize()
  File "C:\Python27\lib\distutils\msvc9compiler.py", line 383, in initialize
    vc_env = query_vcvarsall(VERSION, plat_spec)
  File "C:\Python27\lib\distutils\msvc9compiler.py", line 299, in query_vcvarsall
    raise ValueError(str(list(result.keys())))
ValueError: [u'path']

我已按照here 中的建议安装了 PyWin,但没有帮助。非常感谢帮助解决此问题。

编辑

尝试安装scikit-learn时出现同样的问题

  File "C:\Python27\lib\distutils\msvc9compiler.py", line 299, in query_vcvarsall
    raise ValueError(str(list(result.keys())))
ValueError: [u'path']

【问题讨论】:

这可能会帮助你***.com/questions/2817869/… @kuyan: (1) 我已经安装了适用于 Windows 7 和 .NET Framework 3.5 SP1 的 Microsoft Windows SDK,但没有设置变量 (2) 我在我的机器上找不到 setenv (3)我的促销不是黄色的。 ...请注意,我尝试构建一个模块而不是 python。 【参考方案1】:

我在我的博客中总结了以上内容。 http://springflex.blogspot.com/2014/02/how-to-fix-valueerror-when-trying-to.html

要安装包含所有必需组件的 Visual Studio 2008 Express Edition:

    安装 Microsoft Visual Studio 2008 Express Edition。主要的 Visual Studio 2008 Express 安装程序可从(C++ 安装程序名称为 vcsetup.exe)获得:

    安装 Microsoft Windows SDK。 Microsoft Windows SDK 可通过搜索 Microsoft 的下载站点或直接访问: http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en

    要验证您是否已安装所有组件,请检查 Microsoft SDK 是否包含 C/C++ 编译器“cl.exe”的“amd64”版本。这通常安装到

    C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\cl.exe
    

    将 .../VC/bin/vcvars64.bat 复制到 .../VC/bin/vcvarsamd64.bat

    将 .../VC/bin/vcvars64.bat 复制到 .../VC/bin/amd64/vcvarsamd64.bat

【讨论】:

我已经有这个问题很长时间了,这是我发现的唯一有效的方法! 32 位系统的解决方案是否类似?【参考方案2】:

由于您使用的是 64 位版本的 Python,一旦您安装了 Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1(它安装了安装 Visual Studio 2008 SP1 Express Edition 时未安装的 64 位编译器);您需要将vcvars64.bat 复制到vcvarsall.bat 声称它所在的位置。

%CSIDL_PROGRAM_FILESX86%\Microsoft Visual Studio 9.0\VC\bin\,你需要copy vcvars64.batamd64\vcvarsamd64.bat

注意目标文件名中的 amd 部分。

【讨论】:

该解决方案实际上与 user2276550 下面提供的解决方案相同,但他没有使用适用于 Windows 7 和 .NET Framework 3.5 SP1 的 Microsoft Windows SDK,而是使用适用于 Windows Server 2008 和 .NET Framework 3.5 的 Windows SDK。问题是除非我执行“将 .../VC/bin/vcvars64.bat 复制到 .../VC/bin/vcvarsamd64.bat”,否则您的解决方案不起作用,如 user2276550 帖子的第 4 步所示。这是缺少的步骤吗? 如果有人担心尝试找到更新的 .NET 框架 SDK,请不要担心。我已经安装了 4.6.1,但我继续按照此处的说明安装了 3.5,复制了文件,它解决了问题。【参考方案3】:

Microsoft 现在发布了Visual C++ compiler just for Python 2.7,尽管它适用于使用相同编译器的其他 Python 版本。检查系统要求:需要 setuptools 6.0 或更高版本。它不适用于使用 distutils 的软件包。

【讨论】:

【参考方案4】:

我遇到这个问题是因为我没有 64 位版本的 Visual C++ 2008。为了解决这个问题,我按照 this answer 的“程序和功能”中的“更改/删除”安装了它。

【讨论】:

【参考方案5】:

我遇到了同样的问题,但只是重命名上面列出的文件(以某种不透明的方式)对我不起作用。起作用的是一个更容易的解决方案。只需在开始安装之前运行 vcvarsall.bat。这设置了正确的路径,并且更容易理解。就我而言,我需要一个 64 位版本,所以我运行: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x64

【讨论】:

以上是关于为 Python 2.7 构建/安装 C 模块时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 python 2.7 中导入 zipfile 模块时出现语法错误

使用 Pmw 时出现“ImportError:没有名为 tkinter 的模块”

运行 32 位 Python 2.7 构建的 64 位 Windows 10 的 python-magic 安装挑战

尝试在 Windows 8 上安装 netCDF4 时出现“需要 Python 版本 2.7,在注册表中找不到”错误

在 python 2.7 上安装正则表达式失败,退出状态为 1 [重复]

python配置opencv