windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
作者:登高行远 发布时间:2022-03-22 02:31:42
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 来设置对应的编译环境,如下图:
设置“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 包管理。
来源:https://www.cnblogs.com/fbwfbi/p/4509622.html
猜你喜欢
- 一、安装1、安装easy_install工具wget http://peak.telecommunity.com/dist/ez_setup
- 以下所描述无理论依据,纯属经验谈。MySQL使用4.1以上版本,管他是什么字符集,一律使用默认。不用去设置MySQL。然后举个使用GB231
- 基本简介dot函数为numpy库下的一个函数,主要用于矩阵的乘法运算,其中包括:向量内积、多维矩阵乘法和矩阵与向量的乘法。1. 向量内积向量
- 1. 什么是404404是一个 http 错误代码,即请求的网页不存在。代码404的第一个“4”代表客户端的错误,如错误的网页位址;后两的数
- php有哪些优点?PHP优点:1.入门快,有其它语言基础的程序员二周左右的时间就可以入门,一个月左右的时间基本上就可以开发简单的项目了。2.
- 以前工作的时候由于Oracle8i数据库经常出现用户过多的错误,由于数据量大,经常出现ORA:12500错误,但主要原因是访问过多而引起的,
- 仿照常见的那个图片变换flash做的效果,纯js。不过滤镜变换只对应ie,ff只能看到一般的切换。这个js做的效果最早在sina看到,这里把
- 步骤如下:1.图片灰化;2.中值滤波 去噪3.求图片的光影(自动光学检测)4.除法去光影5.阈值操作6.实现了三种目标检测方法主要分两种连通
- 随着互联网产业的飞速发展和电子产业的飞速发展,人们的社交似乎离不开网络,这就应运了SNS的飞速发展。从打开QQ空间关注朋友们的动态,最近心情
- 基本用法#初始化%h为空数组 %h={};#用数组初始化%h为a=>1,b=>2 %h=('a',1
- 本文实例为大家分享了python实现贪吃蛇双人大战的具体代码,供大家参考,具体内容如下晚上家里小朋友要玩贪吃蛇游戏,还要跟我对战,一时半会我
- 最近在做深度学习时需要用到图像处理相关的操作,在度娘上找到的图片旋转方法千篇一律,旋转完成的图片都不是原始大小,很苦恼,于是google到歪
- 英文文档:staticmethod(function)Return a static method for function.A stati
- 不知道大家在做页面的时候会不会遇到样式定义不生效的问题,基本的表现就是怎么改样式都没显示或只有某些浏览器正常,这时通常需要做下面的几步:确认
- asp创建pdf文件代码,详见以下代码:<%Option ExplicitSub CheckXlDriver()&
- <?php //本功能主要是利用文件修改时间函数filemtime与现在时间作减法判断是否更新内容。 $cahetime=2;//设置
- 当我们的文章表中没有对于文章的评论数字段时,我们该这么写sql语句来显示出评论最多的文章呢?下面本站给大家收集了几种方法,仅供参考:1.se
- 打包下载Pain.php <?php class Pain { public $var=array(); public $tpl=ar
- 我差不多是与做web design的同时接触的flash design,因为那会普遍认为flash神通广大、无所不能。这些年我看Adobe的
- javascript中的数组对象捆绑了强大的方法因此它可以用很简短的代码实现强大的数组操作而这些功能要C或者c++实现的话可能需要花费几倍的