我知道有人问过类似的问题,但没有一个解决方案对我有用/我得到不同的错误。我正在尝试使用 Python 2.7 在 64 位 Windows 7 VM 上安装 PyUSB。
当我从命令行运行安装时,出现错误:无法找到 vcvarsall.bat。当我尝试运行已编译的可执行文件进行安装时,我收到一条错误消息,提示在注册表中找不到 Python 2.7。
对此的任何帮助将不胜感激。
如果您尚未安装 VS 2008,请不要安装。
如果您已经安装了 VS 2008 并且无法获得要编译的扩展,我将卸载 VS 2008 并在程序文件下删除它的目录。问题很可能是 express 版本不附带 64 位编译器。
要获得编译扩展文件,请从 http://www.microsoft.com/en-gb/download/details.aspx?id=44266安装适用于 Windows 的 Python 2.7 编译器 说明说需要 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 将简单地导航到您添加的环境变量,上两层然后下到 VC 文件,希望找到 vcvarsall.bat。
您可以编辑此文件作为重命名 9.0 -> VC 的替代方法,但我认为那是“更脏的”。
另请注意,不需要 VS 2008 目录的原因是第 242 行:
if not productdir or not os.path.isdir(productdir):
如果目录被删除,它将忽略 VS 2008 的旧注册表项。