首页
社区
课程
招聘
[原创] 为 python 设置 Visual Studio 2017 编译环境
发表于: 2018-9-3 17:37 8474

[原创] 为 python 设置 Visual Studio 2017 编译环境

2018-9-3 17:37
8474

右键打开VS2017的命令行编译环境目录,如下,有多个cmd编译环境可选

x64 Native Tools Command Prompt for VS 2017.lnk

x64_x86 Cross Tools Command Prompt for VS 2017.lnk

x86 Native Tools Command Prompt for VS 2017.lnk

x86_x64 Cross Tools Command Prompt for VS 2017.lnk


对于32位python,我们选择 x86 Native Tools Command Prompt for VS 2017.lnk,其他同理;

右键》属性》目标,我们可得到编译环境初始化文件"D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars32.bat"


将Buid目录复制到爷爷级目录( D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC )下,改名为VC

设置 VS90COMNTOOLS=D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build ,

即可使用pip编译安装功能


-------  -------  -------  -------  -------  -------  ------- ------- ------- ------- ------- ------- 

基本情形与原理


pip install crc16 

或安装类似需要编译的模块时,若没有安装配置VS2008,会报错

“error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it fromhttp://aka.ms/vcpython27”


如今距离VS2008已十年,个别与VS2008配置相差无几的VS版本,可以直接在cmd里先设置 VS90COMNTOOLS,即可使用pip 编译安装

set VS90COMNTOOLS = %VS** COMNTOOLS%

其中**为已安装的VS版本,可以在cmd编译环境里set查看。


对于VS2017,简单设置 set VS90COMNTOOLS = % VS150COMNTOOLS %后并不可行。

一来,VS2017提供多种跨平台编译环境,需要具体选定,二来其环境目录尤其时varargall.bat文件相对位置与VS2008有出入。

导致python搜索注册表或vcvarsall.bat编译环境初始化文件失败。


通过阅读python的Lib\distutils\msvc9compiler.py模块,我们可知:

VS_BASE = r"Software\Microsoft\VisualStudio\%0.1f"   

vsbase = VS_BASE % 9.0

Reg.get_value(r"%s\Setup\VC" % vsbase,"productdir")


它会依次搜索注册表主键

HKEYS = (_winreg.HKEY_USERS,

         _winreg.HKEY_CURRENT_USER,

         _winreg.HKEY_LOCAL_MACHINE,

         _winreg.HKEY_CLASSES_ROOT) 

下"Software\Microsoft\VisualStudio\9.0\Setup\VC"项的"productdir"配置值,

然后指定编译环境初始化文件为"productdir"配置值下的vcvarsall.bat,


所以另一种方法我们也可以在任意主键上述路径添加productdir配置值,配置为我们

所安装的VS的的vcvarsall.bat文件所在目录。这个会被python pip优先选用。

对于64-bit python,任意注册表主键下建立

Software\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC

  productdir = D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build

对于32-bit python,,任意注册表主键下建立

Software\Microsoft\VisualStudio\9.0\Setup\VC

  productdir = D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build



当没有相应注册表项配置值时,在msvc9compiler.py会使用环境变量VS90COMNTOOLS指定的目录。

当应当注意到,VS90COMNTOOLS指定的目录并不是productdir目录,

toolskey = "VS%0.f0COMNTOOLS" % 9.0 (即VS90COMNTOOLS)

toolsdir = os.environ.get(toolskey, None)

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

由productdir生成算法可知,

D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\..\..\VC

在VS2017中就是D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\VC,

但D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC下并没有VC目录(严格说时没有包含vcvarsall.bat的VC目录),

所以我们键包含vcvarsall.bat的Build目录复制到目标位置,并改名为VC。



参考链接 

import base64

base64.b64decode('aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpd3VnYW5nNDMyMTAvYXJ0aWNsZS9kZXRhaWxzLzUwNzMyOTIw')


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-9-3 18:08 被tritium编辑 ,原因: 添加 32-bit与64-bit python 配置 2017 编译环境的 注册表键配置方法
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
老兄,你发错版块了?
2018-9-6 11:28
0
游客
登录 | 注册 方可回帖
返回
//