我知道有类似的问题,但没有一个解决方案适用于我/我得到不同的错误。我正在尝试使用Python 2.7在64位Windows 7 VM上安装PyUSB。
当我从命令行运行安装时,我收到错误:无法找到vcvarsall.bat。当我尝试运行已编译的可执行文件进行安装时,我收到一条错误消息,指出在注册表中找不到Python 2.7。
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
如果您尚未安装VS 2008,请不要。
如果您已经安装了VS 2008并且无法获得编译扩展,我会在程序文件下卸载VS 2008并删除它的目录。问题可能是快速版本不随64位编译器一起提供。
要编译扩展文件,请从中安装适用于Windows的Python 2.7编译器 http://www.microsoft.com/en-gb/download/details.aspx?id=44266 说明说需要setuptools 6.0,但即使在更新后我也无法工作。
安装编译器后,找到包含vcvarsall.bat的目录。对我来说是
C:\ Users \ MY_USER_NAME \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python \ 9.0
在那里打开powershell并运行.\vcvarsall.bat amd64
如果你看到这个:
PS C:\Users\MY_USER_NAME\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0> .\vcvarsall.bat amd64
Setting environment for using Microsoft Visual Studio 2008 x64 tools.
一切都很好。
下一步是奇怪但必不可少的,并在最后解释。将目录9.0重命名为VC。
添加环境变量VS90COMNTOOLS并将值设置为bin目录的路径,现在应该是: C:\ Users \ MY_USER_NAME \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python \ VC \ VC \ bin
现在它应该全部工作了。在扩展文件上进行测试:
python setup.py build_ext --inplace
为什么要将9.0重命名为VC?转到python安装目录并找到distutils目录:python_base_dir \ Lib \ distutils
在您选择的文本编辑器中打开msvc9compiler.py并找到第247行。
productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
这意味着distutils将简单地导航到您添加的环境var,上升两个级别然后下载到VC文件中,希望找到vcvarsall.bat。
您可以编辑此文件作为重命名9.0的替代方法 - > VC,但我认为那是“更脏”。
另请注意,需要没有VS 2008目录的原因是第242行:
if not productdir or not os.path.isdir(productdir):
如果删除目录,则忽略VS 2008的旧注册表项。