安装Python for Windows扩展时出现值错误

27

我已经安装了Microsoft Visual Studio 2008。我下载了zip文件Python for Windows extensions并将其内容解压到我的Python27文件夹中,现在有一个名为pywin32-214的子文件夹。(32位部分是个问题吗?我正在64位系统上运行)。以下是命令行的记录:

C:\Python27\pywin32-214>setup.py -q install
Building pywin32 2.7.214.0
Traceback (most recent call last):
  File "C:\Python27\pywin32-214\setup.py", line 2152, in <module>
    ('', ('pywin32.pth',)),
  File "C:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\pywin32-214\setup.py", line 1251, in run
    install.run(self)
  File "C:\Python27\lib\distutils\command\install.py", line 563, in run
    self.run_command('build')
  File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\pywin32-214\setup.py", line 596, in run
    build.run(self)
  File "C:\Python27\lib\distutils\command\build.py", line 127, in run
    self.run_command(cmd_name)
  File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\lib\distutils\command\build_ext.py", line 340, in run
    self.build_extensions()
  File "C:\Python27\pywin32-214\setup.py", line 858, in build_extensions
    self.compiler.initialize()
  File "C:\Python27\lib\distutils\msvc9compiler.py", line 383, in initialize
    vc_env = query_vcvarsall(VERSION, plat_spec)
  File "C:\Python27\lib\distutils\msvc9compiler.py", line 299, in query_vcvarsal
l
    raise ValueError(str(list(result.keys())))
ValueError: [u'path']

我不知道如何理解这个。求助?

7个回答

20

出现这个问题的另一个可能原因是,您刚刚安装了Visual Studio,而您正在使用的命令提示符是在安装之前就存在的。

这是因为MSVC安装程序设置了一些环境变量,其中一个变量(VS90COMNTOOLS)必须设置才能正确执行vcvarsall.bat。 但是,在Windows中,每个运行的程序都持有自己本地副本的环境变量,这些副本会从父进程继承(复制)在子进程启动时。因此,在子进程启动后,它不会收到在系统级别环境变量上执行的更改。获取更新的环境变量的唯一方法是通过生成一个新的子进程实例,其父进程具有更新版本的envvars。


安装了VC 2008之后,这正是我的问题。 - Jason Massey
安装Twisted时遇到了一些问题。非常好的答案,谢谢。 - aqua

17

它说我没有Python27目录,但我有...你认为它可能与Python 2.7.1不兼容吗? - user460847
那么您可能安装的是32位Python,需要下载pywin32-214.win32-py2.7.exe。 - cgohlke
尝试过了...它成功地找到了目录,但是安装进度条在10分钟内完全没有动静。我将尝试寻找一个64位的Python安装程序,然后再次尝试原始的.exe文件。 - user460847
2
这非常不寻常。你可以尝试从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pywin32 使用备用安装程序。 - cgohlke
1
遇到了相同的问题,安装pywin32-214.win-amd64-py2.7.exe无法解决。 - Muhammad Adnan

9
如所述,它尝试使用32位编译器来编译64位Python。您可以通过以下方法成功构建:
  1. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64(取决于您的设置)中找到 vcvarsx86_amd64.bat
  2. 打开 cmd 提示符
  3. 运行 SET VS90COMNTOOLS=%VS120COMNTOOLS%(根据设置,参见https://dev59.com/sHE85IYBdhLWcg3wXCIv#10558328
  4. 运行 vcvarsx86_amd64.bat
  5. 然后运行 pip install <package>

这对我来说很有效,可以运行“pip install usaddress”,但是没有运行“SET VS90COMNTOOLS=%VS120COMNTOOLS%”。然而,我确实让VS90指向了我的VS100安装(VS2010 Express),在安装了VS2012之后。 - Rich Elswick
这将允许您构建,但如果没有安装VS2012库的人尝试运行扩展,将会出现问题。最好安装带有可选64位编译器的VS2008并使用它:http://stackoverflow.com/questions/6692402/visual-studio-2008-for-windows-7-64-bit-for-creating-64-bit-binaries - mmitchell

8

这些答案都没能解决我的问题,但我在问题跟踪器上找到了解决方案:

  1. 打开cmd。
  2. 输入cd "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin"
  3. 键入vcvars32.bat或vcvars64.bat
  4. 在同一个提示符中且不关闭:返回到您要安装的Python模块所在的目录。
  5. 现在应该可以安装代码了。

来源:http://bugs.python.org/issue7511


这对我有用。谢谢。几乎花了两天时间来解决这个问题。感谢@Matthew。 - Parth Chauhan

1
如果您坚持使用Python 2.7 64位(就像我一样),并且不想花钱购买VS2008专业版,您也可以下载VS2008 Express并安装Windows 7 SDK以免费获取兼容的64位编译器。之后,运行Windows 7 SDK SetEnv.Cmd脚本,然后运行setup.py。
> "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd"
> setup.py -q install

SetEnv.Cmd应该设置所有构建所需的环境变量。运行时,会显示一个消息,说明正在“针对Windows 7 x64 Debug”进行目标设置。您还可以使用此命令在发布模式下编译:
> "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /Release
> setup.py -q install

0

Python的Windows扩展仅支持

32位MS Windows(95/98),32位MS Windows(NT / 2000 / XP),所有32位MS Windows(95/98 / NT / 2000 / XP),Win2K, WinXP,WinCE

摘自sourceforge项目页面。看起来你可能没那么幸运!

编辑:然而...阅读this似乎意味着相反。


0

我尝试了所有其他答案和更多操作。 最终安装了Python 32位版本,这立即解决了问题。

如果有此选项,则很可能是最简单的修复方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接