windows下安装python的C扩展编译环境(解决“Unable to find vcvarsall.bat”)

  • 我的文章除注明转载外,均为我的原创或者翻译。
  • 我的文章欢迎各类形式的转载,但请18岁以上的转载者注明文章出处,尊重个人劳动,也尊重你的智商;
  • 本文连接http://www.cnblogs.com/fbwfbi/p/4509622.html 

       

        N久没有开始写博客了,总以为要随便记点东西,岁月蹉跎,曾经搞得一些东西、技术、工具,说丢也就丢了,点点滴滴仍是要记录一下吧。。。html

   在windows下使用pip安装一些python的第三方库,有不少使用C写了一些扩展,须要使用VC++ Compiler 来编译安装(也可以使用MInGW,通常不推荐),不然就会出现“Unable to find vcvarsall.bat”。像Python2.7就须要使用VS2008 C++ compiler , 而python3至python3.4 (python3.5 将采用VS2015)采用VS2010 编译生成。可是,凡安装过VS这个巨无霸的臃肿IDE的都知道,附带捆绑一大堆你不知道有没有用的Microsoft 的插件,占据大量的C盘空间,启动又慢,虽然IDE的界面功能勉强过得去。若是电脑配置通常的话,这东西就搞得N个卡,通常不作相关开发的,就不必去安装整个VS。 对于Python 2.7 来讲,微软还算有良心,直接推出了Microsoft Visual C++ Compiler for Python 2.7,下载直接安装便可。而后,在开始菜单-》全部程序里面,找到对应的目录,根据的你的平台和python版本(选x86或x64)点击对应的Command Prompt运行。 这个cmd窗口里面,能够输入set命令查看一下环境变量,发现,已经设置好了INCLUDE=, PATH=, LIB=, and LIBPATH=这几个参数,因而直接输入python

pip install numpy 

    就可安装编译对应的第三方模块、库了,有时编译过程比较漫长, 需耐心等待。linux

    而对python3 来讲, 则没有这么方便了,因为个人Python3.4 是64位,显然直接用VS2010 Express也不行了,由于它默认只有x86版本的,没有64位的。参考一下Stackoverflow中一篇问答:redis

       Python PIP has issues with path for MS Visual Studio 2010 Express for 64-bit install on Windows 7shell

    根据上面提出的建议,我在本机上获得对应解决方案。先安装VS2010 Express ,而后再安装windows SDK 7.1  ,最后也要安装一个64位compiler的补丁;express

       Microsoft SDK 7.1 (Windows 7) 
windows

       VC-Compiler-KB2519277 工具

     PS:在安装SDK 7.1 以前,请先卸载 VC redistribute 2010 相关(包括X86 和 X64)组件包,不然安装报错。visual-studio

    完成上述步骤以后,基本的MSVC的编译环境(包含x64)就已经配置好了,可是若是你在之后编译项目的时候,好比在构建Qt5项目时,会出现出现如下错误:测试

     c:\program files (x86)\microsoft visual studio 10.0\vc\include\intrin.h(26): fatal error C1083: Cannot open include file: 'ammintrin.h': No such file or directory

    此时则能够到网上下载对应 ammintrin.h ,放到 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\目录下便可,可在下面的这篇百度文库里下载:

  ammintrin.h头文件,Windows SDK 7.1安装KB2519277补丁后必备

    安装完毕以后,在开始菜单里面,找到“Windows SDK 7.1 Command Prompt”, 点击运行,在shell下能够经过SetEnv 来设置对应的编译环境,以下图:

        设置“setenv /x64” 以后,便可在64位编译环境下pip install 对应的包。

        到了这里,可能须要提一下,搭建好环境后,分别在python 2.7 和 python 3.4 里面安装numpy,发现py2没问题,py3却安装编译link失败(以前都在虚拟机里面测试了一下,py3安装是没问题的),这是为什么呢? 请对比一下下面两幅图:

        

  显然py2安装的时候,link命令行下的libpath使用“”引发来了,因此路径有空格不会把参数隔断,而py3就没这么细致了,不知道是pip、setuptools调用cmd命令的缺心眼,仍是distutils里面的bug,反正py3的安装路径不能有空格。因而调整了一下python3的安装路径,也就是不含空格,就编译成功了。

  固然这只是搭建好了VC++ 的编译环境,对于像SciPy这样的数值计算库,安装的话须要Fortran的编译器。显然windows下的编译安装远没有linux下的简单方便(除了包名很差记,包依赖比较麻烦),gcc、gfortran现成的,apt-get 里面也有现成的。 因此在windows下开发测试的话,能够直接在这个加州大学尔湾分校(UCI)提供的大量已编译打包好的针对windows的wheel安装包,上面有Numpy、SciPy、matplotlib等等数值分析、科学计算的模块库,而且还都是 MKL 版的。下载对应的版本,直接用“pip install xxxx.whl”便可完成安装,whl文件其实就跟zip文件同样,打包压缩一下而已,你也直接用压缩软件解开,将其放到对应的Lib/site-packages目录下便可。Of course,你也可使用 Anaconda 这样的python定制环境版本,里面已将上面的包直接集成了,包括像IPython这么好用的REPL工具,以及conda 包管理。

相关文章
相关标签/搜索