为 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.bat
到amd64\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,在注册表中找不到”错误