这是怎么回事? Python模块可以是part written in C or C++(通常用于速度) . 如果您尝试使用Pip(或 setup.py )安装此类软件包,则必须从源代码编译该C / C.开箱即用,Pip将肆无忌惮地假设您安装了Microsoft Visual C编译器 . 如果你没有看到这个神秘错误消息"Error: Unable to find vcvarsall.bat" .
cc1.exe: error: unrecognized command line option '-mno-cygwin'
error: command 'gcc' failed with exit status 1
这解决了它:"Either install a slightly older version of MinGW, or edit distutils\cygwinccompiler.py in your Python directory to remove all instances of -mno-cygwin."(来自here)
我使用 Python 3.4.1 on Windows 7 x64 遇到了这个问题,遗憾的是我需要的软件包没有't have suitable exe or wheels that I could use. This system requires a few ' workarounds',详情如下(和 TLDR at bottom ) .
File "numpy\core\setup.py", line 686, in get_mathlib_info
raise RuntimeError("Broken toolchain: cannot link a simple C program")
RuntimeError: Broken toolchain: cannot link a simple C program
“谷歌”告诉我,我需要安装“Microsoft Visual C ++ for Python 2.7” . 我不仅安装了该工具,还安装了Visual C 2008 Reditributable,但它没有帮助 . 然后我尝试安装Visual C 2008 Express Edition . 问题已经消失了!
Microsoft发布了Python 2.7的编译器包,使人们可以更轻松地在Windows上构建和分发C扩展模块 . Microsoft Visual C ++ for Python 2.7(又名VC9)可从以下网址获得:http://aka.ms/vcpython27该软件包包含为Python 2.7 32位和64位构建C扩展模块所需的所有工具和头文件(请注意,某些扩展模块需要第三方依赖项,例如未包含的OpenSSL或libxml2 . 还支持使用Visual C 2008构建的其他Python版本,因此“Python 2.7”只是广告 - 它可以在2.6和3.2下正常工作 .
30 回答
看起来它正在寻找VC编译器,所以你可以尝试用
-c mingw32
提及编译器类型,因为你有msys在http://www.microsoft.com/en-us/download/details.aspx?id=44266的Microsoft Visual C ++ for Python 2.7不是解决方案吗?
这是怎么回事? Python模块可以是part written in C or C++(通常用于速度) . 如果您尝试使用Pip(或
setup.py
)安装此类软件包,则必须从源代码编译该C / C.开箱即用,Pip将肆无忌惮地假设您安装了Microsoft Visual C编译器 . 如果你没有看到这个神秘错误消息"Error: Unable to find vcvarsall.bat" .规定的解决方案是安装C / C编译器,Microsoft Visual C或MinGW(一个开源项目) . 但是,安装和配置任何一个都非常困难 . (编辑2014:微软已经为Python 2.7发布了一个特殊的C++ compiler)
最简单的解决方案是使用Christoph Gohlke的Windows安装程序(.msi)来获得流行的Python包 . 他为Python 2.x和3.x,32位和64位构建安装程序 . 你可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/下载它们
如果你认为"Error: Unable to find vcvarsall.bat"是一个荒谬可笑且无益的消息,那么请在http://bugs.python.org/issue2943上对错误进行评论,将其替换为更有用且用户友好的消息 .
为了进行比较,Ruby附带了一个包管理器Gem,并提供了一个准官方C / C编译器DevKit . 如果您尝试安装没有它的软件包,您会看到这个有用的友好有用的消息:
您可以在https://stackoverflow.com/a/13445719/284795阅读更长时间的关于Python包装的咆哮
下面的步骤为我解决了这个问题,我试图用cython扩展创建设置 .
安装Microsoft Visual C ++ for Python 2.7
默认安装位置为@ C:\ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C for Python这可能实际上解决了问题,在继续之前测试一次 .
如果失败,请检查VC中python vcvarsall.bat文件所在的位置
在记事本中打开distutils包的msvc9compiler.py文件 .
在我的方框中,这是@ C:\ Anaconda2 \ Lib \ distutils \ msvc9compiler.py此文件中的find_vcvarsall函数,通过打印出版本参数来确定VC的版本 . 对于Python 2.7,它可能是9.0
现在创建一个环境变量VS90COMNTOOLS,指向C:\ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C for Python \ 9.0 \ VC \ bin
由于某种原因,distutils期望vcvarsall.bat文件在VC目录中,但是python工具的VC将它放在9.0的根目录中 . 要修复此问题,请从path.join中删除“VC”(大约在第247行附近)
#productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") productdir = os.path.join(toolsdir, os.pardir, os.pardir)
以上步骤为我解决了这个问题 .
您可以使用easy_install而不是pip它适合我 .
您可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/安装编译版本
当我尝试在我的python 3.5上安装numpy库时遇到了这个问题 . 解决方案是安装VS2015 . 我有VS2008,2012,2013,其中没有一个与python 3.5兼容 . 显然,较新版本的python依赖于较新版本的VS.
还要确保使用Visual Studio安装C Common Tools .
如果你安装了mingw
工作,强制使用mingw编译器而不是微软的pip构建 . 有关详细信息,请参见https://github.com/pypa/pip/issues/18(上一篇文章) .
2016年解决此问题的最简单方法是安装Chocolatey,然后安装
vcpython27
包 . 打开Powershell:fastest solution :
如果您有 python 3.4.x ,那么解决方案就是安装VC 2010,因为它用于编译自己 .
https://www.visualstudio.com/en-us/downloads#d-2010-express
我的python版本是win32上的MSC v.1600 32位(英特尔)
在Windows8上运行良好
查看您要安装的软件包的
setup.py
文件 . 如果它是较旧的包,则可能导入distutils.core.setup()
而不是setuptools.setup()
.我参与了这个(2015年)这些因素的组合:
来自http://aka.ms/vcpython27的Microsoft Visual C ++ for Python 2.7
使用
distutils.core.setup()
的旧软件包尝试做
python setup.py build
而不是使用pip
.如果你使用最新版本的pip,它会强制(monkeypatch)包使用setuptools,即使它的
setup.py
调用了distutils . 但是,如果您不使用pip,而只是执行python setup.py build
,则构建过程将使用distutils.core.setup()
,它不知道编译器安装位置 .解决方案
Step 1: 打开相应的Visual C 2008命令提示符
打开“开始”菜单或“开始”屏幕,然后搜索“Visual C 2008 32位命令提示符”(如果您的python是32位)或“Visual C 2008 64位命令提示符”(如果您的python是64位) . 运行 . 该命令提示符应该在 Headers 栏中说Visual C 2008 ....
Step 2: 设置环境变量
您刚刚打开的命令提示符中设置这些环境变量 .
参考http://bugs.python.org/issue23246
Step 3: 构建并安装
cd
到您要构建的包,然后运行python setup.py build
,然后运行python setup.py install
. 如果要安装到virtualenv中,请在构建之前将其激活 .我有python 2.73和Windows 7.对我有用的解决方案是:
将mingw32的bin目录添加到环境变量:使用
C:\programs\mingw\bin;
追加 PATH创建 distutils.cfg 位于
C:\Python27\Lib\distutils\distutils.cfg
,其中包含:要处理MinGW不再识别-mno-cygwin标志,请删除C:\ Python27 \ Lib \ distutils \ cygwincompiler.py第322行到第326行中的标志,因此它看起来像这样:
我尝试了很多解决方案,但只有一个为我工作,安装了Microsoft Visual Studio 2008 Express C .
我用C编写的Python 2.7模块遇到了这个问题(yEnc,它与MS VS有其他问题) . 请注意,Python 2.7是使用MS VS 2008版本而不是2010版本构建的!
尽管它是免费的,但很难找到,因为MS正在推广VS 2010.尽管如此,MSDN官方的直接链接仍在工作:检查https://stackoverflow.com/a/15319069/2227298下载链接 .
我不知道是否为时已晚,但我发现了Microsoft Visual C++ Compiler for Python 2.7
希望这可以帮助!
如果您希望在未安装Visual Studio的Windows机器上安装pyodbc,则另一个选项是使用二进制分发版手动安装pyodbc .
如果您在正在使用的计算机上没有管理员权限并且正在尝试设置virtualenv,则此功能特别有用 .
脚步:
从here下载最新的Windows安装程序(pyodbc-X.X.X.win-Y-py2.7.exe)
使用7-Zip(或WinRAR或其他)打开安装程序可执行文件
提取pyodbc.pyd和pyodbc-X.X.X-py2.7.egg-info并将它们放在
[python installation directory or virtualenv]\Lib\site-packages
中没有第4步:)
也许有人可能感兴趣,以下为py2exe包工作了 . (我有Windows 7 64位和便携式python 2.7,带有Windows SDK for Windows 7和.NET Framework 4的Visual Studio 2005 Express)
然后:
您可以从http://go.microsoft.com/?linkid=7729279下载免费的Visual C 2008 Express Edition,它将在安装期间设置VS90COMNTOOLS环境变量,因此可以使用兼容的编译器进行构建 .
正如@PiotrDobrogost在评论中提到的,他对这个问题的回答详细说明了为什么Visual C 2008是正确的构建方式,但随着Python的Windows版本迁移到更新版本的Visual Studio,这可能会改变:Building lxml for Python 2.7 on Windows
我只是遇到了同样的问题,所以我会在这里讲述我的故事,希望它可以帮助其他人解决同样的问题并节省他们刚刚花费的几个小时:
我在Windows 7框中有mingw(g(GCC)4.6.1)和python 2.7.3,我正在尝试安装PyCrypto .
这一切都始于运行setup.py install时出现此错误:
通过将mingw指定为选择的编译器,在谷歌搜索错误后轻松解决:
问题是,我得到了一个不同的错误:
事实证明,我的反病毒阻止了新编译的.exe的执行 . 我刚刚禁用了防病毒“驻留盾”并转到下一个错误:
这解决了它:"Either install a slightly older version of MinGW, or edit distutils\cygwinccompiler.py in your Python directory to remove all instances of -mno-cygwin."(来自here)
现在,我终于可以开始工作了 .
如果要使用Visual Studio C编译而不是mingw ...
python.exe
以显示其编译的VC版本(示例如下所示) .黄色(顶部)是Python 2.7,使用MSC v.1500编译(Visual Studio C 2008)
Red(底部)是Python 3.4.1,使用MSC v.1600编译(Visual Studio C 2010)
下面列出了特定版本VC的附加说明 .
Visual Studio C 2008的注释
仅适用于32位编译器,请下载Visual Studio C++ 2008 Express Edition .
对于64位编译器[2] [3],请下载Windows SDK for Windows 7 and .NET Framework 3.5 SP1 .
Visual Studio C 2010的注释
根据Microsoft的说法,如果您安装了Visual Studio 2010 SP1,它可能已经删除了VC的编译器和库 .
如果是这种情况,请下载Visual C++ 2010 SP1 Compiler Update .
Visual Studio C的注释2015年
如果您不需要Visual Studio IDE,请下载Visual Studio C++ 2015 Build Tools .
Visual Studio C 2017的注释
如果您不需要Visual Studio IDE,请下载Build Tools for Visual Studio 2017 .
Suggestion :如果您同时安装了32位和64位Python,您可能还需要使用virtualenv来创建单独的Python环境,这样您就可以一次使用一个或另一个而不会弄乱您的路径选择哪个Python版本使用 .
打开
cmd.exe
在尝试安装需要C扩展的东西之前,请运行以下批处理文件以将VC编译器的环境加载到会话中(即环境变量,编译器的路径等) .
Execute:
注意:32位Windows安装只能按预期方式使用
C:\Program Files\
注意:是的,本机64位编译器位于
Program Files (x86)
中 . 不要问我为什么 .另外,如果您想知道
vcvars64.bat
和vcvarsx86_amd64.bat
之间有什么区别,或者更重要的是amd64
和x86_amd64
之间的区别,前者是针对本机64位编译器工具而后者是可以在32位运行的64位交叉编译器-bit Windows安装 .Update:
如果由于某种原因你得到
error: ... was unexpected at this time.
,其中...
是某些字符系列,那么你需要检查你的路径变量没有任何无关的字符,如额外的引号或杂散字符 . 批处理文件无法更新您的会话路径,如果它首先无法理解它 .对于32位编译器工具:
Setting environment for using Microsoft Visual Studio 20xx x86 tools.
对于64位编译器工具:
Setting environment for using Microsoft Visual Studio 20xx x64 tools.
现在,通过
python setup.py install
或pip install pkg-name
运行设置希望并指出行星正确对齐,以便VC合作 .
我想在Python 2.7下在Windows 10上运行pysph并且找不到vcvarsall.bat(来自distutils)
我的解决方案如下:
安装Microsoft Visual C for Python 2.7(如@Michael建议)
在Windows 10上安装它(我的用户名是Andreas):
将环境变量 VS90COMNTOOLS 设置为Visual C for Python 2.7的安装路径(参见上面的路径) .
如果它仍然不起作用,那么在模块中进行修改
文件 msvc9compiler.py . 在其中找到函数 find_vcvarsall 并进行以下修改 .
替换线:
同
这是vcvarsall.bat驻留在我的情况下的位置(检查,vcvarsall.bat在你的安装中) .
我尝试了上述所有答案,并发现所有这些答案都不起作用,这可能是我使用Windows 8并安装了Visual Studio 2012.在这种情况下,这就是你所做的 .
vcvarsall.bat
文件位于:C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC
只需选择文件,然后复制即可 .
然后转到此目录:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools
并粘贴文件 . 然后,一切都应该好 .
Update :评论指出此处的说明可能很危险 . 考虑使用Visual C 2008 Express版本或专用的Microsoft Visual C++ Compiler for Python(details)和 NOT 使用下面的原始答案 . 原始错误消息表示未安装所需的Visual C版本 .
对于Windows安装:
在运行setup.py进行软件包安装时,Python 2.7会搜索已安装的Visual Studio 2008.您可以通过在调用
setup.py
之前在VS90COMNTOOLS
环境变量中设置正确的路径来欺骗Python使用较新的Visual Studio .根据安装的Visual Studio版本执行以下命令:
Visual Studio 2010(VS10):
SET VS90COMNTOOLS=%VS100COMNTOOLS%
Visual Studio 2012(VS11):
SET VS90COMNTOOLS=%VS110COMNTOOLS%
Visual Studio 2013(VS12):
SET VS90COMNTOOLS=%VS120COMNTOOLS%
Visual Studio 2015(VS14):
SET VS90COMNTOOLS=%VS140COMNTOOLS%
警告:如下所述,如果您尝试编译python模块,则此答案不太可行 .
有关详细信息,请参阅Building lxml for Python 2.7 on Windows .
我使用 Python 3.4.1 on Windows 7 x64 遇到了这个问题,遗憾的是我需要的软件包没有't have suitable exe or wheels that I could use. This system requires a few ' workarounds',详情如下(和 TLDR at bottom ) .
使用Jaxrtech's answer above中的信息,我确定我需要Visual Studio C 2010(sys.version返回MSC v.1600),所以我从他的答案中的链接安装了Visual C 2010 Express,即http://go.microsoft.com/?linkid=9709949 . 我安装了所有更新,但正如您在下面看到的,这是一个错误 . 只有原始版本的Express应该此时安装(没有更新任何东西) .
vcvarsall.bat现在已存在,但安装包时出现了新错误
query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']
. 此错误还有其他stackoverflow问题,例如Errors while building/installing C module for Python 2.7我从答案中确定2010 Express只安装了32位编译器 . 要获得64位(和其他)编译器,您需要安装Windows 7.1 SDK . 见http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx
这不会为我安装,安装程序返回错误
installation failed with return code 5100
. 我在以下链接找到了解决方案:http://support.microsoft.com/kb/2717426 . 简而言之,如果安装了较新版本的x86和x64 Microsoft Visual C 2010 Redistributable,则它们与SDK安装程序中的版本冲突,需要先卸载 .然后安装了SDK,但我注意到
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
中仍然不存在vcvars64.bat,也没有其子文件夹 . vcvarsall.bat运行vcvars64批处理文件,所以没有它,python包仍然无法安装(我忘记了此时显示的错误) .然后我在这里找到了一些说明:http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1按照说明,我已经安装了Express和7.1 SDK,因此安装了SDK 7.1 SP1,并修复了丢失的头文件 . 然后我手动创建了内容为
CALL setenv /x64
的vcvars64.bat . 我会在这里粘贴所有这些说明,这样他们就不会迷路 .我的python包仍然没有安装(无法回忆错误) . 然后我找到一些指令(下面复制)使用特殊的SDK 7.1命令提示符,请参阅:https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html
我按照说明打开了Windows SDK 7.1命令提示符,并用它在python包上运行easy_install . 最后,成功!
TLDR ;
安装Visual Studio Express 2010(最好不使用更新的可再发行组件或SQL服务器) .
安装Windows 7.1 SDK
安装SDK 7.1 SP1更新和VS2010 SP1头文件修复(可能不需要此步骤) .
手动创建
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat
,内容为CALL setenv /x64
开始 - >所有程序 - > Microsoft Windows SDK v7.1 - > Windows SDK 7.1命令提示符打开特殊的x64命令提示符,然后可以与python / easy_install / pip / etc(包括virtual_envs中的那些)一起使用 .
尽管有可用的C编译器,我也有同样的错误(我发现它很愚蠢,并且没有任何错误信息消息),并且仍然存在问题 .
令人惊讶的是,最终为我工作的只是 upgrading pip and setuptools to the most recent version . 希望这有助于其他人 .
我找到了解决方案 . 我有完全相同的问题,并且错误,安装'amara' . 我安装了mingw32,但需要配置distutils .
我已经安装了Python 2.6 .
我安装了mingw32到
C:\programs\mingw\
将mingw32的bin目录添加到环境变量:将
c:\programs\MinGW\bin;
追加到 PATH编辑(如果不存在则创建) distutils.cfg 位于
C:\Python26\Lib\distutils\distutils.cfg
的文件为:easy_install.exe amara
.通过打开新的
cmd.exe
确保设置环境 .使用Python 3.4,依赖项是在Visual Studio 2010上 . 安装Visual C 2010 Express为我解决了这个问题 .
尝试使用我碰巧使用的VS 2008或2013安装不起作用 .
在我的python 3.4 64位版本中花了将近2天的时间来弄清楚如何解决这个问题:Python 3.4.3(v3.4.3:9b73f1c3e601,2015年2月24日,22:44:40)[MSC v.1600 64 bit(AMD64) )]在win32上
Solution 1, hard: (在阅读本文之前,先阅读下面的第一个解决方案2)最后,这对我有所帮助:
安装Visual C++ 2010 Express
安装Microsoft Windows SDK v7.1 for Windows 7
手动创建文件
vcvars64.bat
在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
中,其中包含CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64
或其他路径,具体取决于您安装的位置(这似乎是可选的)与Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1一起安装Microsoft Visual Studio 2010 Service Pack 1
之后我尝试
pip install numpy
但收到以下错误:我在
C:\Python34\Lib\distutils\msvc9compiler.py
中将mfinfo
更改为None
https://stackoverflow.com/a/23099820/4383472pip install numpy
命令后我的avast防病毒试图干扰安装过程,但我很快就禁用了它花了很长时间 - 几分钟为numpy编译,我甚至认为有一个错误,但最后一切都很好 .
Solution 2, easy: (我知道这个方法已经在一个高度投票的_235989中提到了,但让我重复一遍,因为它真的很容易)经过所有这些工作后,我明白对我来说最好的方法就是使用已经预编译的二进制文件http://www.lfd.uci.edu/~gohlke/pythonlibs/在未来 . 我很少有机会需要这个网站不包含的一些软件包(或软件包的版本) . 这种安装过程也快得多 . 例如,要安装
numpy
:从该站点
donwload
numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl
(如果你有Python 3.4 64位)在命令提示符或powershell中使用pip
pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl
(或文件的完整路径,具体取决于命令提示符的打开方式)安装它我遇到了同样的问题,此刻已经解决了 .
“谷歌”告诉我,我需要安装“Microsoft Visual C ++ for Python 2.7” . 我不仅安装了该工具,还安装了Visual C 2008 Reditributable,但它没有帮助 . 然后我尝试安装Visual C 2008 Express Edition . 问题已经消失了!
只是尝试安装Visual C 2008 Express Edition!
@monkey给出的答案是正确的答案,但它不完整 .
如果你想使用MinGW,你应该选择C,C以及MinGW安装过程中建议的其他开发工具来获得"make.exe."
您还必须在env中将路径设置为make.exe .
为了完成他的回答,以下是步骤:
将mingw32的bin目录添加到环境变量中
将
C:\Programs\MinGW\bin;C:\Programs\MinGW\msys\1.0\bin;
追加到PATH编辑(如果它不存在则创建)位于
C:\Python26\Lib\distutils\distutils.cfg
的distutils.cfg
文件为:确保通过打开新的cmd.exe来设置环境变量 .
您需要安装Microsoft编译器,与用于构建Python的编译器兼容 . 这意味着您需要Visual C 2008(或更新版本,使用some tweaking) .
Microsoft现在提供捆绑的编译器和头文件,以便能够在令人难忘的URL上编译Python扩展:
这是一个相对较小的包;下载85MB,无需管理员权限即可安装,无需重启 . 这个名称有点误导,编译器适用于最初使用Visual C 2008编译的任何Python版本,而不仅仅是Python 2.7 .
如果您启动Python交互式提示或打印
sys.version
,请查找MSC
版本字符串;如果它是MSC v.1500
你可以使用这个工具 .来自original announcement to the distutils list:
请注意,您需要安装setuptools 6.0 or newer(在下载页面的系统要求中列出) . 您正在安装的项目必须使用
setuptools.setup()
,而不是distutils
或自动检测不起作用 .Microsoft已声明他们希望保持URL稳定,以便自动脚本可以轻松地引用它 .