右键打开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 编译环境的 注册表键配置方法