在Windows上使用Python pip - 命令'cl.exe'失败

57
我正在尝试使用pip install spacy安装spaCy,但是出现了以下错误...

enter image description here

我已安装VS 2015,并安装了以下Python版本:3.5.2 |Anaconda 2.5.0 (64-bit)| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]。我尝试了以下SO解决方案,但都无济于事:除此之外,还有其他各种问题。这不是特定库的唯一问题,而是在Windows上尝试安装需要C构建的Python库时普遍存在的问题。

我在尝试在PyCharm中安装GDAL时遇到了这个错误。你找到解决方案了吗? - DarkShadow
9个回答

65
您正在安装一个包,其中的部分是用C/C++编写的,因此您需要在计算机上安装并将Microsoft C编译器(cl.exe)添加到PATH中。 PATH是一个环境变量,它告诉Windows在哪里查找可执行文件。
首先,请确保已安装Visual Studio的C++构建工具
  • 如果您的计算机上已经安装了Visual Studio,请从Visual Studio Installer中安装使用C++的桌面开发
  • 否则,您可以从Visual Studio下载页面(页面底部附近)单独下载Visual Studio Build Tools,然后从安装程序中选择C++构建工具
然后,不要使用正常的命令提示符或PowerShell,而应使用开始菜单中的Visual Studio文件夹中的特殊命令提示符之一。这会自动设置PATH,以便找到cl.exe
  • 对于32位Python,请使用x86本机工具命令提示符
  • 对于64位Python,请使用x64本机工具命令提示符

27

我尝试按照您的指示操作,但是出现了错误“'pip'不是内部或外部命令”。我正在尝试安装包pychm。在通常的命令提示符中直接安装该软件包时,我遇到了错误“command cl.exe failed”。请问我做错了什么吗?顺便说一下,我正在使用Python 3.6和Windows 7。 - mockash
1
这意味着python.exe不在您的环境变量列表中。您需要提供其完整位置,例如(在我的情况下): “C:\ Program Files \ WinPython \ python-3.6.5.amd64 \ Scripts \ pip.exe”安装package_name - Kunal Mathur
链接已损坏。 - DunkOnly
补充@KunalMathur的评论,如果您使用conda环境,则pip可执行文件可能位于类似C:\Users\<username>\miniconda3\envs\subdivnet\Scripts\pip.exe的文件夹中。只需在conda环境内运行where pip即可找到路径。 - ofekp
这对我有用!在Git Bash中进行pip安装没有起作用--不知何故,一些*.h文件在构建wheel时没有被搜索到的目录中。为什么在Visual C++命令提示符中可以工作,但在Git Bash或其他shell中却不行呢? - undefined

13

在我的情况下,我需要从Visual Studio安装更多工具(我正在使用VS 2017社区版和Python 3.6.4)。我安装了这些工具(请参阅安装程序截图此处):

  1. C++桌面开发:我包括所有默认项和以下项:

    • Windows XP支持C ++
    • 对C ++ / CLI的支持
    • VC ++ 2015.3 v140工具集
  2. C++ Linux开发

然后我以管理员特权打开Windows PowerShell(右键单击以打开),移动Visual Studio安装文件夹并找到该路径:

cd [Visual Studio Path]\VC\Auxiliary\Build

然后我执行了这个文件:

.\vcvars32.bat

之后我像平常一样使用pip,例如,我想安装Mayavi

pip install mayavi

我希望这也能帮助到其他人。


2
说句题外话 - 我也遇到了安装psycopg2-binary时出现的同样错误,只是按照你建议的重新配置了VS 2017 Community,问题就解决了(不需要添加任何到路径中的东西等)。 - ductionist
1
如果有人找不到辅助文件夹,我也没有一个,可以在Bin文件夹中查找。批处理文件就在那里。 - dbinott

5

请参考以下链接:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#cytoolz

根据您的python版本下载正确的whl文件(如果您不确定自己的python版本,请启动解释器以查看)

使用pip命令安装该包,假设该文件在下载文件夹中且您使用的是32位python 3.6版本:

python -m pip install C:\Users\%USER%\Downloads\cytoolz‑0.9.0.1‑cp36‑cp36m‑win32.whl

对于任何无法在您的Windows系统编译的包,都可以按照此方法操作。


4

在Kunal Mathur的回答和@mockash的回答中,我补充了一些内容,因为我的声望不足无法发表评论。

在你输入pip install package_name之前,你需要先将目录更改到pip.exe所在的文件夹。例如:

打开Visual C++ 2015 x86 x64 Cross Build Tools命令提示符 -> 更改目录cd C:\Users\Test\AppData\Local\Programs\Python\Python36-32\Scripts -> 输入:pip install package_name

但奇怪的是,我只能通过'Visual C++ 2015 x64 x86'而不是'x86 x64'成功安装。


3
我曾经遇到过与Visual Studio 2017相同的问题。
你可以在这里找到cl.exe C:\Program Files(x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86
只需将环境变量设置为上述地址,并在Anaconda中运行该命令,这对我起作用了。

3
如果您希望轻松愉快地自动化,可以查看Chocolatey.org/install,并基于您所需的VC++版本进行复制和粘贴命令。该命令来自https://chocolatey.org/install
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

一旦您安装了 Chocolatey,您可以关闭并重新打开 Powershell 终端,或者运行以下命令:

Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" ; Update-SessionEnvironment

现在您可以使用Chocolatey安装Python(默认为最新的3.x版本)。
choco install python

# This next command installs the latest VisualStudio installer that lets you get specific versions of the build
# Microsoft has replaced the 2015 and 2017 installer links with this one, and we can still use it to install the 2015 and 2017 components

choco install visualstudio2019buildtools --package-parameters "--add Microsoft.VisualStudio.Component.VC.140 --passive --locale en-US --add Microsoft.VisualStudio.Component.Windows10SDK.$($PSVersionTable.BuildVersion.Build) --no-includeRecommended" -y --timeout 0

# Usually need the "unlimited" timeout aka "0" because Visual Studio Installer takes forever

# Tool portion
# Microsoft.VisualStudio.Product.BuildTools
# Component portion(s)
# Microsoft.VisualStudio.Component.VC.140
# Win10SDK needs to match your current Win10 build version
# $($PSVersionTable.BuildVersion.Build)
# Microsoft.VisualStudio.Component.Windows10SDK.$($PSVersionTable.BuildVersion.Build)

# Because VS2019 Build Tools are dumb, need to manually link a couple files between the SDK and the VC++ dirs
# You may need to tweak the version here, but it has been updated to be as dynamic as possible 
# Use an elevated Powershell or elevated cmd prompt (if using cmd.exe just use the bits after /c)
cmd /c mklink "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\rc.exe" "C:\Program Files (x86)\Windows Kits\10\bin\$($PSVersionTable.BuildVersion.Major).$($PSVersionTable.BuildVersion.Minor).$($PSVersionTable.BuildVersion.Build).0\x64\rc.exe"

cmd /c mklink "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\rcdll.dll" "C:\Program Files (x86)\Windows Kits\10\bin\$($PSVersionTable.BuildVersion.Major).$($PSVersionTable.BuildVersion.Minor).$($PSVersionTable.BuildVersion.Build).0\x64\rcdll.dll"

一旦安装完成,您应该重新启动电脑。虽然偶尔不需要重新启动即可运行,但如果您首先重新启动,pip install 命令将会更加有效。
现在您可以执行 pip install pipenv 或者 pip install complex-package 了,然后就可以开始使用了。

1
我曾多次遇到这个问题。有cl.exe,但出于某种奇怪的原因,pip找不到它,即使我们从bin文件夹运行命令,在那里cl.exe存在。尝试使用conda安装程序,对我来说效果很好。
正如您在以下图片中所看到的,pip无法找到cl.exe。然后我尝试使用conda进行安装。

image 1

令我惊讶的是,只要您安装了正确版本的vs cpp构建工具(即v14.0),并将其安装在正确的目录中,它就能够无错误地安装。

image 2


1
  1. 安装Microsoft Visual C++ 14.0构建工具。(Windows 7)
  2. 使用conda创建虚拟环境。
  3. 激活环境并使用conda安装必要的软件包。

例如: conda install -c conda-forge spacy


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