我试图安装Python软件包dulwich:



 pip install dulwich
 


但是我收到了一条隐秘的错误消息:

 error: Unable to find vcvarsall.bat
 


如果我尝试安装,也会发生同样的情况手动打包:

 > python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
 


评论

供将来参考,很高兴看到您在哪个平台上使用此工具。

如果您认为这是一个荒谬的,无助的错误消息,请在bugs.python.org/issue2943
上对该错误进行投票。
Microsoft现在提供了一个解决方案:microsoft.com/en-us/download/details.aspx?id=44266

@MartijnPieters我尝试下载并安装wheel和setuptools 7.0提供的链接,但是它不起作用,我收到消息:C:\ Users \ User \ libfreenect \ wrappers \ python> python setup.py install running install running build running build_ext建筑物'freenect'扩展错误:找不到vcvarsall.bat

史蒂夫·道尔(Steve Dower)(微软Python团队的一名成员)撰写了一篇有关该主题的博客文章,值得一读:blogs.msdn.microsoft.com/pythonengineering/2016/04/11/…

#1 楼

更新:评论指出此处的说明可能很危险。考虑使用Visual C ++ 2008 Express版或专用于Python的Microsoft Visual C ++编译器(详细信息),而不要使用下面的原始答案。原始错误消息表示未安装所需的Visual C ++版本。


对于Windows安装:

在运行setup.py进行软件包安装时,Python 2.7搜索对于已安装的Visual Studio2008。可以通过在调用VS90COMNTOOLS之前在setup.py环境变量中设置正确的路径来欺骗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模块。

有关详细信息,请参见在Windows上为Python 2.7构建lxml。

评论


它为我做了:(

–fmuecke
2012年5月22日19:33

@Gili:看来这个问题是由于变量中的空格所致,请尝试将其包装在引号中。对我来说%VS100COMNTOOLS%=“ C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Tools”

–legends2k
2012年10月5日在11:44



这在很多事情上都不起作用,因为Python依赖于VS2008。看看这个答案:stackoverflow.com/questions/6551724/…

– shezi
13年2月16日在11:35

警告!!!这是错误的答案。在任何情况下,您都不应使用不同的(版本)编译器来编译Python C扩展,而这是用于编译Python本身的编译器,因为这两个(版本)编译器可能会具有不兼容的C运行时库。有关更多详细信息,请参见此答案。

–彼得·多布罗格斯特(Piotr Dobrogost)
13年4月29日在19:35

您可以从go.microsoft.com/?linkid=7729279下载免费的Visual C ++ 2008 Express Edition,它将在安装过程中设置VS90COMNTOOLS环境变量,并因此使用兼容的编译器进行构建。

–埃里克·史密斯(Eric Smith)
2013年12月6日18:38

#2 楼

我找到了解决方案。
安装'amara'时,我遇到了完全相同的问题和错误。我已经安装了mingw32,但是需要配置distutils。


我已经安装了Python 2.6。
我已经将mingw32安装到C:\programs\mingw\

将mingw32的bin目录添加到您的环境变量中:将c:\programs\MinGW\bin;附加到PATH


编辑(如果不存在,则创建)位于C:\Python26\Lib\distutils\distutils.cfg的distutils.cfg文件为:

[build]
compiler=mingw32


现在运行easy_install.exe amara

通过打开新的cmd.exe来确保环境已设置。

评论


这对于Python2.6非常有用,但是由于某些原因,我无法在Python2.7上使用它。如果我下载软件包源码并使用'python setup.py install --compile = mingw32'进行安装,则可以使用它,但是由于某些原因,使用easy_install或pip仍会尝试查找vcvarsall。

–乔纳森·哈特利
10年7月16日在16:11

我终于通过将C:\ msysgit \ mingw \ mingw32 \ bin和C:\ msysgit \ mingw \ bin添加到用户PATH并重新启动Spyder,然后再次运行pip install,将scikits.image安装在Python(x,y)2.7中。

– Endolith
2011年11月26日在6:11

由于环境变量发生了更改,因此无需重新引导。打开一个新的cmd.exe进程就足够了。

– Tomalak
2012年6月29日上午8:47

我仍然无法解决此问题。这是错误:gcc:错误:无法识别的命令行选项'-mno-cygwin'错误:安装脚本退出并显示错误:easy_install.exe amara后,命令'gcc'失败,退出状态为1

–用户
2013年9月17日下午13:17

@user,您应该打开以下文件:C:\ Python27 \ Lib \ distutils \ cygwincompiler.py并从其中删除所有–mno-cygwin的事件;这是因为最新版本的GCC已删除了–mno-cygwin选项,因此该选项不应该存在。

– Zeinab Abbasimazar
2014年5月5日下午5:55

#3 楼

您可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/
安装编译版本

评论


只是一个提示:您可以通过在virtualenv中运行easy_install binary_installer_built_with_distutils.exe,根据此答案,在virtualenv中从此站点安装软件包。

– yangzh
2013年9月7日下午4:32

您也可以将这些安装程序转换为..exe,然后根据需要使用pip安装它们。

–佐巴
2014-09-29 22:27

更确切地说,lfd.uci.edu/~gohlke/pythonlibs/#mysql-python并下载后,以admin身份打开终端并运行python -m pip install <文件名>

–阿伦
16年5月3日在18:54



冬青树的上帝之母,这是当场。像魅力一样工作,TY :)

–阿米尔
16年8月31日在9:15

#4 楼

如果要使用Visual Studio C ++而不是mingw进行编译,请运行python.exe,以显示使用哪个版本的VC ++(如下所示)。 br />

重要的是使用与Python一起编译的Visual C ++编译器的相应版本,因为distilutils的get_build_version会阻止混合版本(按照Piotr的警告)。



黄色(顶部)是使用MSC v.1500(Visual Studio C ++ 2008)编译的Python 2.7
红色(底部)是使用MSC v.1600(Visual Studio)编译的Python 3.4.1 C ++ 2010)




使用下表[1]将内部VC ++版本与相应的Visual Studio版本进行匹配:

MSC v.1000 -> Visual C++ 4.x        
MSC v.1100 -> Visual C++ 5          
MSC v.1200 -> Visual C++ 6          
MSC v.1300 -> Visual C++ .NET       
MSC v.1310 -> Visual C++ .NET 2003  
MSC v.1400 -> Visual C++ 2005  (8.0)
MSC v.1500 -> Visual C++ 2008  (9.0)
MSC v.1600 -> Visual C++ 2010 (10.0)
MSC v.1700 -> Visual C++ 2012 (11.0)
MSC v.1800 -> Visual C++ 2013 (12.0)
MSC v.1900 -> Visual C++ 2015 (14.0)
MSC v.1910 -> Visual C++ 2017 (15.0)
MSC v.1911 -> Visual C++ 2017 (15.3)
MSC v.1912 -> Visual C++ 2017 (15.5)
MSC v.1913 -> Visual C++ 2017 (15.6)
MSC v.1914 -> Visual C++ 2017 (15.7)
MSC v.1915 -> Visual C++ 2017 (15.8)
MSC v.1916 -> Visual C++ 2017 (15.9)   



从上一步下载并安装相应版本的Visual Studio C ++。
下面列出了VC ++特定版本的其他说明。

Visual Studio C ++ 2008的注意事项

对于仅32位编译器,请下载Visual Studio C ++ 2008 Express Edition。

对于64-位编译器[2] [3],下载适用于Windows 7和.NET Framework 3.5 SP1的Windows SDK。



取消选中除Developer Tools >> Visual C++ Compilers之外的所有内容,以节省安装不必要的SDK工具所需的时间和磁盘空间。



Visual Studio C ++ 2010的注释

根据Microsoft的说明,如果安装了Visual Studio 2010 SP1,则可能已删除了编译器和库适用于VC ++。
在这种情况下,请下载Visual C ++ 2010 SP1编译器更新。

Visual Studio C ++ 2015的注意事项

如果不需要Visual Studio IDE,下载Visual Studio C ++ 2015生成工具。

Visual Studio C ++ 2017的注意事项

如果不需要Visual Studio IDE,请下载Visual Studio生成工具Studio 2017.

建议:如果您同时安装了32位和64位Python,则可能还希望使用virtualenv创建单独的Python环境,这样就可以一次使用一个或另一个,而无需弄乱选择要使用哪个Python版本的路径。使用。



根据@srodriguex,您可以跳过手动加载批处理文件的步骤(步骤4-6),只需将一些批处理文件复制到Python所在的位置即可正在按照此答案进行搜索。如果这不起作用,请执行以下最初对我有用的步骤。



打开cmd.exe

,然后再尝试安装需要C扩展名的东西,请运行以下批处理文件以将VC ++编译器的环境加载到会话中(即环境变量,编译器的路径等)。

执行:



32位编译器:

注意:32位Windows安装仅具有C:\Program Files\按预期


"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"



64位编译器:


"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars64.bat"


注意:是的,本机64位编译器位于Program Files (x86)中。不要问我为什么。
另外,如果您想知道vcvars64.batvcvarsx86_amd64.bat之间的区别,或更重要的是amd64x86_amd64之间的区别,则前者适用于本机64位编译器工具,而后者则适用于本机64位编译器工具。可以在32位Windows安装上运行的64位交叉编译器。


更新:
如果由于某种原因得到error: ... was unexpected at this time.,其中...是一系列字符,那么您需要检查path变量中是否没有多余的字符,例如多余的引号或流浪字符。如果批处理文件最初没有意义,则将无法更新会话路径。


如果一切顺利,则应根据以下版本的VC ++和运行的命令获得以下消息之一:

对于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 installpip install pkg-name
运行安装程序。希望并用手指指望行星正确对齐,以便VC ++配合。


评论


不能推荐您确实经历直接移动到64位的痛苦。您需要超过4gb的地址空间只是时间问题。我从痛苦的经历中讲到了32位,因为它要容易得多,然后必须卸载包括依赖项在内的所有内容并使用64位。几乎整个周末。

–托马斯·布朗(Thomas Browne)
2014年2月9日在9:31

再说一次,我忘了有多少人将不得不使用Python来完成更大的任务。 @ThomasBrowne,我敢肯定,这是一种痛苦的体验,是不必要的邪恶。我正在研究它,希望可以找到一些东西。主要问题是Visual Studio C ++ 2008 Express没有附带64位编译器,但我确定它在此处。

–乔什·鲍登(Josh Bowden)
2014年2月9日在20:25



刚刚对其进行了更新,以获取更多信息,其中涵盖了如何在需要时获取64位编译器的信息。

–乔什·鲍登(Josh Bowden)
2014年2月11日在21:04

就我而言,我按照上面的步骤1进行操作,而忽略了其余的答案。现在,我可以安装软件包,而不必担心运行.bat的麻烦。

–srodriguex
14年4月13日在14:32

在那种情况下@srodriguex很好,似乎Python假设使用64位编译器工具正在寻找... \ VC \ bin \ vcvarsamd64.bat和... \ VC \ bin加载到PATH中\ amd64 \ vcvarsamd64.bat。

–乔什·鲍登(Josh Bowden)
14年4月13日在19:58

#5 楼

这是怎么回事? Python模块可以用C或C ++编写(通常是为了提高速度)。如果尝试使用Pip(或setup.py)安装这样的软件包,则必须从源代码编译该C / C ++。开箱即用,Pip会大胆假设您已安装了Microsoft Visual C ++编译器。如果没有它,您将看到此错误消息“错误:无法找到vcvarsall.bat”。

规定的解决方案是安装C / C ++编译器,即Microsoft Visual C ++或MinGW(开源项目)。但是,安装和配置任何一个都非常困难。 (2014年修订:Microsoft已发布了适用于Python 2.7的特殊C ++编译器)。

最简单的解决方案是将Christoph Gohlke的Windows安装程序(.msi)用于流行的Python软件包。他为Python 2.x和3.x,32位和64位构建安装程序。您可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/


下载它们,如果您也认为“错误:无法找到vcvarsall.bat”是含糊不清和无用的消息,然后请在http://bugs.python.org/issue2943上对该错误进行评论,以更有用和用户友好的消息替换它。

作为比较,Ruby附带了一个软件包管理器Gem,并提供了一个准官方的C / C ++编译器DevKit。如果您尝试在没有安装软件包的情况下安装该软件包,则会看到以下有用的有用信息:


请更新您的PATH以包含构建工具或从http://rubyinstaller.org下载DevKit。 / downloads,并按照http://github.com/oneclick/rubyinstaller/wiki/Development-Kit


上的说明进行操作,您可以在https://上阅读有关Python打包的更长篇幅stackoverflow.com/a/13445719/284795

评论


如何使用pip在我的虚拟环境中安装此预编译的可执行文件?

– Shailen
13年8月3日在13:37

@shailenTJ好问题。我从未做过,但是请尝试stackoverflow.com/a/5442340/284795

–上校恐慌
2013年8月3日在16:49



这是我所知道的最好/最简单的解决方案。谢谢。

–user1477388
2013年12月17日19:22

对于我来说,Edit 2014是最佳答案。容易错过的说明:请确保使用pip install setuptools --upgrade将setuptools更新到6.0或更高版本。

– orlade
15年1月6日在7:41

#6 楼

您需要安装与用于构建Python的编译器兼容的Microsoft编译器。这意味着您需要Visual C ++ 2008(或更高版本,需要进行一些调整)。

Microsoft现在提供了捆绑的编译器和标头,以便能够在难忘的URL上编译Python扩展:


适用于Python 2.7的Microsoft Visual C ++编译器

http://aka.ms/vcpython27


这是一个相对较小的软件包;下载85MB,无需管理员权限即可安装,无需重新启动。名称有点误导,该编译器适用于最初使用Visual C ++ 2008编译的任何Python版本,而不仅仅是Python 2.7。

如果启动Python交互式提示符或打印sys.version,请查找MSC版本字符串;如果是MSC v.1500,则可以使用此工具。

从原始公告到distutils列表:


Microsoft已发布了适用于Python 2.7的编译器程序包人们可以更轻松地在Windows上构建和分发C扩展模块。可从以下网站获得用于Python 2.7的Microsoft Visual C ++编译器(aka VC9):http://aka.ms/vcpython27

该软件包包含为Python 2.7构建C扩展模块所需的所有工具和头文件。 32位和64位(请注意,某些扩展模块要求不包含第三方的依赖关系,例如OpenSSL或libxml2)。还支持使用Visual C ++ 2008构建的其他Python版本,因此“ Python 2.7”只是广告-可以在2.6和3.2上正常使用。


请注意, setuptools已安装6.0或更高版本(在下载页面的系统要求中列出)。您正在安装的项目必须使用setuptools.setup()而不是distutils,否则自动检测将无法正常工作。

Microsoft声明他们希望保持URL的稳定,以便自动脚本可以轻松地引用它。

评论


根据我的其他评论,您可以确保setuptools与pip install setuptools --upgrade是最新的。

– orlade
15年1月6日在7:42

我调查了为什么相关逻辑出现在setuptools中而不是distutils中的问题-毕竟,构建模块是核心功能,并且确实具有相关代码,但是它是一个较旧的版本。看起来distutils维护人员只是放弃了对所有可能的MSSDK版本的支持,而将这项工作转交给了更热衷的setuptools同事。

– ivan_pozdeev
16-4-11在1:03



@ivan_pozdeev:setuptools的发布频率也远高于python发行周期中包含的distutils。 distitutils实际上已经进入了某种维护模式,并计划在新系统上进行替换。那工作停了下来。

–马丁·彼得斯(Martijn Pieters)♦
16年4月11日在6:26

cython使用distutils,您需要导入猴子补丁distutils的setuptools:github.com/cython/cython/wiki/CythonExtensionsOnWindows

–denfromufa
16年4月18日在16:32

#7 楼

我只是遇到了同样的问题,所以我在这里讲述我的故事,希望它可以帮助遇到相同问题的其他人,并为他们节省几个小时的时间:

我有mingw(g ++(GCC )4.6.1)和python 2.7.3安装在Windows 7盒子中,我正在尝试安装PyCrypto。

运行setup.py install时,所有错误均始于此错误:

error: Unable to find vcvarsall.bat


通过将mingw指定为首选编译器,可以在错误搜索后轻松解决:

setup.py install build --compiler=mingw32


问题是,那么我出现了另一个错误:

configure: error: cannot run C compiled programs.


事实证明,我的防病毒软件阻止了新编译的.exe的执行。我只是禁用了防病毒“驻留防护程序”,然后转到下一个错误:

cc1.exe: error: unrecognized command line option '-mno-cygwin' 
error: command 'gcc' failed with exit status 1


此问题已解决:“要么安装稍旧版本的MinGW,要么在您的Python目录中编辑distutils \ cygwinccompiler.py,以删除-mno-cygwin的所有实例。” (从这里开始)

现在,我终于可以开始工作了。

评论


您还将需要与MinGW兼容的Python库版本。有关更多信息,请参见eli.thegreenplace.net/2008/06/28/…

–吉利
2012年5月22日15:16

曲折:D

– Xilpex
19年4月21日在21:18

#8 楼

看起来它正在寻找VC编译器,因此您可以尝试使用-c mingw32来提及编译器类型,因为您拥有msys

python setup.py install -c mingw32


评论


为了说明问题,有效的命令是:python setup.py build --compiler = mingw32,然后是python setup.py install

– EmilStenström
2012年6月12日在21:13



在运行python setup.py build --compiler = mingw32之后,我收到ImportError:在Anaconda下安装Cython时,没有名为Cython.Distutils的模块。有什么建议?

–机缘巧合
2015年11月19日在17:22

#9 楼

我有python 2.73和Windows7。对我有用的解决方案是:


将mingw32的bin目录添加到环境变量中:将路径附加C:\programs\mingw\bin;


在位于C:\Python27\Lib\distutils\distutils.cfg的distutils.cfg中创建了以下内容:

[build]
compiler=mingw32



要处理MinGW不再识别-mno-cygwin标志的情况,请删除C:\ Python27 \ Lib \ distutils \ cygwincompiler.py第322至326行,因此如下所示:

  self.set_executables(compiler='gcc -O -Wall',
                         compiler_so='gcc -mdll -O -Wall',
                         compiler_cxx='g++ -O -Wall',
                         linker_exe='gcc',
                         linker_so='%s %s %s'
                                    % (self.linker_dll, shared_option,
                                       entry_point))


#10 楼

查看您要安装的软件包的setup.py文件。如果是较旧的软件包,可能是导入distutils.core.setup()而不是setuptools.setup()

我在2015年遇到此问题,并综合考虑了以下因素:


来自http://aka.ms/vcpython27的适用于Python 2.7的Microsoft Visual C ++编译器如果您使用的是最新版本的pip,即使distutils.core.setup()要求distutils,它也会强制(monkeypatch)软件包使用setuptools。但是,如果您不使用pip,而只是在执行python setup.py build,则构建过程将使用pip,它不知道编译器的安装位置。


解决方案

步骤1:打开适当的Visual C ++ 2008命令提示符

打开“开始”菜单或“开始”屏幕,并搜索“ Visual C ++ 2008 32位命令提示符”(如果您的python是32位)或“ Visual C ++ 2008 64位命令提示符”(如果您的python是64位)。运行。命令提示符在标题栏中应显示Visual C ++ 2008...。步骤2:设置环境变量

在刚打开的命令提示符中设置这些环境变量。

 setup.py 


参考http://bugs.python.org/issue23246

步骤3:构建并安装

python setup.py build到要构建的软件包,并运行distutils.core.setup()SET DISTUTILS_USE_SDK=1 SET MSSdk=1 。如果要安装到virtualenv中,请在构建之前将其激活。

评论


您还可以使用 pip 而不是 python setup.py build 来构建软件包

– aronadaal
2015年5月19日下午5:41

#11 楼

也许有人会感兴趣,以下对py2exe软件包很有效。
(我有Windows 7 64位和可移植python 2.7,带有Windows SDK for Windows 7和.NET Framework 4的Visual Studio 2005 Express)

set VS90COMNTOOLS=%VS80COMNTOOLS%


然后:

python.exe setup.py install


评论


不,您是对的,我不确定发生了什么,我将删除原始评论。

–戴夫·查利斯(Dave Challis)
13年4月15日在10:41

很有用!!就我而言,我已经设置了“ set VS90COMNTOOLS =%VS110COMNTOOLS%”。

– jrvidotti
13年11月8日15:55



@Exzile:是的,您可以在同一命令提示符会话中键入这些命令

– Steefano Fenu
2014年9月4日14:48在

不要这样做!!!有关更多详细信息,请参见此答案。

–匿名
5月24日20:37

#12 楼

我花了将近2天的时间弄清楚如何在python 3.4 64位版本中解决此问题:Python 3.4.3(v3.4.3:9b73f1c3e601,Feb 24 2015,22:44:40)[MSC v.1600 64位(AMD64 )]在win32上

,解决方案1,难:(在阅读本文之前,请先阅读下面的解决方案2)
最后,这对我有帮助:


安装Visual C ++ 2010 Express

安装适用于Windows 7的Microsoft Windows SDK v7.1

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或其他路径,具体取决于您所在的位置您已安装
(这似乎是可选的),然后在Windows SDK 7.1上安装Microsoft Visual Studio 2010 Service Pack 1和Microsoft Visual C ++ 2010 Service Pack 1编译器更新


我尝试pip install numpy但收到以下错误:

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


我将此https://stackoverflow.com/a/23099820/4383472的mfinfo更改为None中的C:\Python34\Lib\distutils\msvc9compiler.py

pip install numpy之后命令我的avast防病毒软件试图干扰安装过程,但是我迅速禁用了它。

花了很长时间-numpy编译了几分钟,我什至以为出现了错误,但最后一切都好的。

解决方案2,简单:
(我知道这种方法已经在高度投票的答案中提到过,但是让我重复一遍,因为它确实更容易)
通过所有这些工作,我了解最好的方法就是将来使用http://www.lfd.uci.edu/~gohlke/pythonlibs/中已经预编译的二进制文件。我极少需要这个网站不包含的某些软件包(或软件包的版本)。这种方式的安装过程也更快。例如,要从该站点安装numpy


从该站点下载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(或文件的完整路径,取决于打开命令提示符的方式)进行安装


评论


numpy‑1.9.2 + mkl‑cp34‑none‑win_amd64.whl-在上述链接上找不到此文件。

– Amresh Giri
19-09-16在10:22

#13 楼

我想在Windows 10上的python 2.7下运行pysph并没有找到vcvarsall.bat(来自distutils)。

我的解决方案如下:

安装Microsoft Visual C ++ for Python 2.7(建议使用@Michael)

在Windows 10上已安装(我的用户名是Andreas): VS90COMNTOOLS到Visual C ++ for python 2.7的安装路径(请参见上面的路径)。

如果仍然无法正常运行,请在模块中进行修改。

C:\Users\Andreas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python.0


文件msvc9compiler.py。在其中找到函数find_vcvarsall并进行以下修改。

替换行:



这是我的情况下vcvarsall.bat所在的位置(检查安装中vcvarsall.bat的位置)。

评论


有趣的是,%userprofile%\ Appdata \ Local \ Programs \ Common对我来说是空的。

–布莱斯·昆塔(Bryce Guinta)
16年11月18日在5:01

即使在安装了适用于Python 2.7的Microsoft Visual C ++之后?

– Chiefenne
16年11月18日在15:17

#14 楼

当我尝试在python 3.5上安装numpy库时遇到此问题。解决的办法是安装VS2015。我有VS2008、2012、2013,其中没有一个与python 3.5兼容。显然,较新版本的python依赖于较新版本的VS。

还请确保Visual Studio已安装C ++通用工具。



#15 楼

我尝试了上述所有答案,但发现它们都不起作用,这可能是我使用Windows 8并安装了Visual Studio2012。在这种情况下,这就是您的工作。

vcvarsall.bat文件位于:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC

只需选择文件,然后将其复制。

然后转到此目录:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools

并粘贴文件。然后,一切都会好起来。

评论


并非所有人都不太满意,我仍然按照您的回答进行操作,但仍然遇到相同的错误。

–Stupid_Intern
2015年12月5日15:18

#16 楼

您可以从http://go.microsoft.com/?linkid=7729279下载免费的Visual C ++ 2008 Express Edition,它将在安装过程中设置VS90COMNTOOLS环境变量,并因此使用兼容的编译器进行构建。

正如@PiotrDobrogost在评论中提到的那样,他对另一个问题的回答详细介绍了为什么要使用Visual C ++ 2008构建正确的东西,但是随着Windows的Python构建向Visual Studio的较新版本的迁移,这种情况可能会改变: Windows上适用于Python 2.7的lxml

评论


还要确保没有安装其他版本。我为此很难。我重新格式化了计算机,并仅安装了此版本。因为删除VS的多个版本会花我很长时间。

–jmunsch
2014年6月30日14:37

#17 楼

我在Windows 7 x64上使用Python 3.4.1遇到了这个问题,不幸的是,我需要的软件包没有合适的exe或wheel可以使用。该系统需要一些“解决方法”,下面对此进行了详细说明(底部是TLDR)。

使用上述Jaxrtech答案中的信息,我确定我需要Visual Studio C ++ 2010(sys.version返回MSC) v.1600),因此我从他的答案中的链接http://go.microsoft.com/?linkid=9709949安装了Visual C ++ 2010 Express。我安装了所有带有更新的内容,但是正如您在下面看到的那样,这是一个错误。此时仅应安装Express的原始版本(不更新任何内容)。

vcvarsall.bat现在存在,但是在安装软件包query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']时出现了新错误。还有其他与此错误有关的stackoverflow问题,例如为Python 2.7构建/安装C模块时发生的错误。

我从该回答中确定2010 Express仅安装32位编译器。要获取64位(和其他)编译器,您需要安装Windows 7.1 SDK。请参阅http://msdn.microsoft.com/zh-cn/windowsserver/bb980924.aspx

这对我来说不会安装,安装程序返回错误installation failed with return code 5100。我在以下链接中找到了解决方案:http://support.microsoft.com/kb/2717426。简而言之,如果安装了x86和x64 Microsoft Visual C ++ 2010 Redistributable的较新版本,它们将与SDK安装程序中的版本冲突,因此需要先进行卸载。

然后安装了SDK,但我注意到vcvars64。 bat在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin或其子文件夹中仍然不存在。 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。我将所有这些说明粘贴到此处,以免丢失。


步骤1是下载Visual Studio Express2010。

http:// www.microsoft.com/visualstudio/zh-cn/products/2010-editions/express
是一个不错的起点。下载安装程序,然后运行它
(vc_web.exe)。您不需要SQL 2008的其他下载。

64位编译器还需要Windows SDK(当前为7.1)
-除非您要进行32位编译仅内部版本,
完全不受支持...

http://www.microsoft.com/zh-cn/download/details.aspx?id=8279很好
下载此文件的起点-下载后,您将要运行winsdk_web.exe


这里的默认安装就可以了。

最后,下载并安装Windows SDK 7.1 SP1更新:
http://www.microsoft.com/zh-cn/download/details.aspx?id=4422

缺少头文件VS2010 SP1。
http://www.microsoft.com/downloads/zh-CN/confirmation.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

血腥的地狱,修复VS2010 Express丢失的批处理文件。
变得完全荒唐。

在C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64中,
用以下命令创建“ vcvars64.bat”以下内容(您将需要以管理员身份运行
):

CALL setenv / x64


我的python包仍未安装(可以'不记得错误)。然后,我找到了一些使用特殊的SDK 7.1命令提示符的说明(在下面复制),请参阅:https://mail.python.org/pipermail/distutils-sig/2012-February/018300.html


没关系,这个问题。此处有人在菜单上注意到此项目:开始->所有程序-> Microsoft Windows SDK v7.1-> Windows SDK 7.1命令提示符

这将运行批处理作业,该作业似乎是在设置工作环境对于编译器。在该提示符下,您可以键入“ setup.py build”或“ setup.py install”。


我按照指示打开了Windows SDK 7.1命令提示符,并使用它来运行easy_install在python包上。最后,成功了!


TLDR;


安装Visual Studio Express 2010(最好没有更新的可再发行文件或SQL Server)。 >安装Windows 7.1 SDK
更新Instal SDK 7.1 SP1,并修复VS2010 SP1头文件(可能不需要此步骤)。
手动创建内容为C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.batCALL setenv /x64

开始- >所有程序-> Microsoft Windows SDK v7.1-> Windows SDK 7.1命令提示符以打开特殊的x64命令提示符,然后可以将其与python / easy_install / pip / etc(包括virtual_envs中的命令)一起使用。


#18 楼

以下步骤为我解决了此问题,我正尝试使用cython扩展名创建安装程序。


为Python 2.7安装Microsoft Visual C ++编译器
默认安装位置为@ <适用于Python的C:\ Users \ PC-user \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++
这实际上可以解决此问题,请在进行操作之前进行一次测试。
如果失败,请检查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 ++
用于Python \ 9.0 \ VC \ bin

由于某种原因,distutils期望vcvarsall.bat文件位于VC目录中,但是VC ++用于python工具
具有它在9.0的根目录中要解决此问题,请从
path.join(大约在第247行附近)中删除“ VC”

#productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") productdir = os.path.join(toolsdir, os.pardir, os.pardir)


以上步骤为我解决了此问题。

评论


我在执行上述步骤时遇到链接错误LINK:错误LNK2001:无法解析的外部符号init__init__ build \ temp.win-amd64-2.7 \ Release_init_.lib:致命错误LNK1120:1无法解析的外部错误:命令'C:\\ Users \ \ ma306477 \\ AppData \\ Local \\ Programs \\ Common \\ Microsoft \\ Visual C ++ for Python \\ 9.0 \\ VC \\ Bin \\ amd64 \\ link.exe'失败,退出状态为1120

– Manish Prasad
18-10-4在12:01



#19 楼

使用此链接下载和安装Visual C ++ 2015生成工具。它将自动下载visualcppbuildtools_full.exe并安装Visual C ++ 14.0,而无需实际安装Visual Studio。安装完成后,请重试pip安装,您将不会再收到错误消息。

我已经在以下平台和版本上对其进行了测试:

Python 3.6 on Windows 7 64-bit
Python 3.7 on Windows Server 2016 (64-bit system)
Python 3.8 on Windows 10 64-bit


评论


是否安装所有内容,或者需要自定义安装?

–Idonknow
6月20日3:07

@Idonknow无需安装完整的Visual Studio,您只需要从上面提供的链接下载并安装Visual C ++。

– Lalit Kumar B
6月20日8:56

#20 楼

我尝试了许多解决方案,但只有一种对我有效,即安装了Microsoft Visual Studio 2008 Express C ++。 VS)。请注意,Python 2.7是使用MS VS 2008版本而不是2010版本构建的。

尽管它是免费的,但是由于MS正在推广VS 2010,所以很难找到它。
仍然,MSDN官方的非常直接的链接仍在起作用:检查https://stackoverflow.com/a/15319069/2227298以获取下载链接。

评论


是的,最好的方法是安装VS2008。

– pylover
2013年12月11日下午0:39

#21 楼

如果您安装了mingw

pip install --global-option build_ext --global-option --compiler=mingw32 packagename


正常工作,则强制使用mingw编译器而不是Microsoft的pip进行构建。有关详细信息,请参见https://github.com/pypa/pip/issues/18(最新发布)。

#22 楼

http://www.microsoft.com/zh-cn/download/details.aspx?id=44266上的Microsoft Visual C ++ Compiler for Python 2.7是否不是解决方案?

评论


为我工作。 pip安装pysftp结尾的错误消息出现以下解决方案错误:需要Microsoft Visual C ++ 9.0(无法找到vcvarsall.bat)。从http://aka.ms/vcpython27获取

–鲍勃·斯坦(Bob Stein)
16年1月20日在12:29

#23 楼

解决此问题的最简单方法是在2016年安装Chocolatey,然后安装vcpython27软件包。打开Powershell:

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install python2 -y
> choco install vcpython27 -y


#24 楼

调用import setuptools将猴子补丁distutils强制与Visual Studio兼容。手动调用vcvars32.bat将设置虚拟环境并防止编译器抛出其他常见错误。对于VS 2017,该文件位于


“ C:\ Program Files(x86)\ Microsoft Visual
Studio \ 2017 \ Community \ VC \ Auxiliary \ Build \ vcvars32。 bat“


这是我用来将.pyx文件快速编译为.pyd的设置脚本:
(注意:它使用了第三方模块

# cython_setup.py
import sys, os, time, platform, subprocess
from setuptools import setup, find_packages
from Cython.Build import cythonize
from traceback import format_exc

# USAGE:
#
#   from cython_setup import run
#   run(pyx_path)

# vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Auxiliary\Build\vcvars32.bat"

# NOTE: to use visual studio 2017 you must have setuptools version 34+
vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio17\BuildTools\VC\Auxiliary\Build\vcvars32.bat"


def _build_ext():
    try:
        pyx_path = sys.argv.pop(-1)
        pyx_path = os.path.abspath(pyx_path)
        if not os.path.exists(pyx_path):
            raise FileNotFoundError(f"{pyx_path} does not exist")
        project_name = sys.argv.pop(-1)
        os.chdir(os.path.abspath(os.path.dirname(pyx_path)))

        print("cwd: %s" % os.getcwd())
        print(os.path.abspath("build"))
        setup(
            name=project_name,
            # cmdclass = {'build_ext': build_ext},
            packages=find_packages(),
            # ext_modules=cythonize(extensions)
            ext_modules=cythonize(pyx_path,
                                  compiler_directives={'language_level': 3, 'infer_types': True, 'binding': False},
                                  annotate=True),
            # include_dirs = [numpy.get_include()]
            build_dir=os.path.abspath("build")
        )
    except:
        input(format_exc())


def retry(func):
    def wrapper(*args, **kw):
        tries = 0
        while True:
            try:
                return func(*args, **kw)
            except Exception:
                tries += 1
                if tries > 4:
                    raise
                time.sleep(0.4)

    return wrapper


@retry
def cleanup(pyx_path):
    from send2trash import send2trash
    c_file = os.path.splitext(pyx_path)[0] + ".c"
    if os.path.exists(c_file):
        os.remove(c_file)

    if os.path.exists("build"):
        send2trash("build")


def move_pyd_files(pyx_path):
    pyx_dir = os.path.dirname(pyx_path)
    build_dir = os.path.join(pyx_dir, "build")
    if not os.path.exists(build_dir):
        raise RuntimeError(f"build_dir {build_dir} did not exist....")
    found_pyd = False
    for top, dirs, nondirs in os.walk(build_dir):
        for name in nondirs:
            if name.lower().endswith(".pyd") or name.lower().endswith(".so"):
                found_pyd = True
                old_path = os.path.join(top, name)
                new_path = os.path.join(pyx_dir, name)
                if os.path.exists(new_path):
                    print(f"removing {new_path}")
                    os.remove(new_path)
                print(f"file created at {new_path}")
                os.rename(old_path, new_path)
    if not found_pyd:
        raise RuntimeError("Never found .pyd file to move")

def run(pyx_path):
    """
    :param pyx_path:
    :type pyx_path:
    :return: this function creates the batch file, which in turn calls this module, which calls cythonize, once done
    the batch script deletes itself... I'm sure theres a less convoluted way of doing this, but it works
    :rtype:
    """
    try:
        project_name = os.path.splitext(os.path.basename(pyx_path))[0]
        run_script(project_name, os.path.abspath(pyx_path))
    except:
        input(format_exc())


def run_script(project_name, pyx_path):
    dirname = os.path.dirname(pyx_path)
    # ------------------------------
    os.chdir(dirname)
    if os.path.exists(vcvars):
        #  raise RuntimeError(
        # f"Could not find vcvars32.bat at {vcvars}\nis Visual Studio Installed?\nIs setuptools version > 34?")
        subprocess.check_call(f'call "{vcvars}"', shell=True)

    cmd = "python" if platform.system() == "Windows" else "python3"
    subprocess.check_call(f'{cmd} "{__file__}" build_ext "{project_name}" "{pyx_path}"', shell=True)
    move_pyd_files(pyx_path)
    cleanup(pyx_path)


if len(sys.argv) > 2:
    _build_ext()


评论


的确,即使在cython编译的情况下,导入setuptools也会有所帮助。

–巴吉
18年11月6日13:47



您能详细解释一下吗?如何手动调用vcvars32.bat?我正在编辑cython

–王俊
19年8月26日在17:06

安装Visual C ++生成工具后,运行pip install --upgrade setuptools可以使我正常工作。

–伊万·卡拉哈斯(Ivan Karajas)
9月3日4:49

#25 楼

我不知道是否为时已晚,但是我发现适用于Python 2.7的Microsoft Visual C ++编译器显示为



如果需要此编译器包,您将收到的典型错误消息是Unable找到vcvarsall.bat


希望有帮助!

#26 楼

我遇到了同样的问题,目前已经解决了。

“ Google”告诉我我需要安装“适用于Python 2.7的Microsoft Visual C ++编译器”。我不仅安装了该工具,还安装了Visual C ++ 2008 Reditributable,但这并没有帮助。然后,我尝试安装Visual C ++ 2008 Express Edition。问题就解决了!

只需尝试安装Visual C ++ 2008 Express Edition!

#27 楼

如果要在未安装Visual Studio的Windows机器上安装pyodbc,另一种选择是使用二进制发行版手动安装pyodbc。

如果您没有管理员,则此功能特别有用您正在使用的计算机上的特权以及正在尝试设置虚拟环境的计算机。

步骤:


从此处下载最新的Windows安装程序(pyodbc- XXXwin-Y-py2.7.exe)
使用7-Zip(或WinRAR或其他工具)打开安装程序可执行文件
解压缩pyodbc.pyd和pyodbc-XXX-py2.7.egg-info并将它们放在[python installation directory or virtualenv]\Lib\site-packages

没有步骤4 :)


#28 楼

使用Python 3.4,依赖关系依赖于Visual Studio2010。安装Visual C ++ 2010 Express对我来说解决了这个问题。

欺骗我使用我偶然无法使用的VS 2008或2013安装。

#29 楼

您可以使用easy_install代替pip,它对我有用。

评论


相同的错误错误:安装脚本退出,错误:无法找到vcvarsall.bat

–斯蒂芬·席尔克(Stephan Schielke)
15年10月30日在16:16

#30 楼

@monkey给出的答案是正确的答案之一,但并不完整。

如果您想使用MinGW,则应选择C,C ++以及在开发过程中建议的其他开发工具MinGW的安装过程也要获取“ make.exe”。

您还必须在环境中设置路径make.exe。

要在此处完成回答,步骤如下:


将mingw32的bin目录添加到环境变量中
C:\Programs\MinGW\bin;C:\Programs\MinGW\msys.0\bin;附加到PATH中

编辑(如果不存在则创建)位于distutils.cfgC:\Python26\Lib\distutils\distutils.cfg文件为:

[build]
compiler=mingw32



通过打开新的cmd.exe确保设置了环境变量。

评论


32位python模块应使用32位mingw编译,而64位python模块应使用64位mingw编译。在Cygwin 64位上,有2个mingw可执行文件可用:x86_64-w64-mingw32-gcc和i686-w64-mingw32-gcc。这些可执行文件显然与您通常从Mingw获得的可执行文件相同(只是在Cygwin环境中编译)。

– CMCDragonkai
17年2月14日在2:27