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


Posted in Python onFebruary 21, 2018

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

在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=这几个参数,于是直接输入

pip install numpy

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

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

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

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

    

 Microsoft SDK 7.1 (Windows 7) 

    

 VC-Compiler-KB2519277

     PS:在安装SDK 7.1 之前,请先卸载 VC redistribute 2010 相关(包括X86 和 X64)组件包,否则安装报错。

    完成上述步骤之后,基本的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 来设置对应的编译环境,如下图:

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

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

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

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

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

显然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 包管理。

Python 相关文章推荐
python通过ftplib登录到ftp服务器的方法
May 08 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
Python中sys模块功能与用法实例详解
Feb 26 Python
python实现文字版扫雷
Apr 24 Python
什么是python的函数体
Jun 19 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 #Python
基于Django用户认证系统详解
Feb 21 #Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 #Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 #Python
python中abs&map&reduce简介
Feb 20 #Python
Python中常见的异常总结
Feb 20 #Python
Python中单例模式总结
Feb 20 #Python
You might like
php文件上传简单实现方法
2015/01/24 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
JavaScript 基础问答三
2008/12/03 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
python3.4中清屏的处理方法
2020/07/06 Python
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
高考自主招生自荐信
2013/10/20 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
小班幼儿评语大全
2014/04/30 职场文书
新品发布会策划方案
2014/06/08 职场文书
大学教师个人总结
2015/02/10 职场文书
2015年国培研修感言
2015/08/01 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
详解CocosCreator项目结构机制
2021/04/14 Javascript
浅谈python数据类型及其操作
2021/05/25 Python