错误:无法找到 vcvarsall.bat

2024-11-20 08:44:00
admin
原创
8
摘要:问题描述:我尝试安装 Python 包dulwich:pip install dulwich 但我收到一条神秘的错误信息:error: Unable to find vcvarsall.bat 如果我尝试手动安装该包,也会发生同样的情况:> python setup.py install running...

问题描述:

我尝试安装 Python 包dulwich:

pip install dulwich

但我收到一条神秘的错误信息:

error: Unable to find vcvarsall.bat

如果我尝试手动安装该包,也会发生同样的情况:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat

解决方案 1:

更新:评论指出此处的说明可能存在危险。请考虑使用 Visual C++ 2008 Express 版本或专门为 Python 构建的 Microsoft Visual C++ 编译器(详细信息),而不要使用下面的原始答案。原始错误消息意味着未安装所需的 Visual C++ 版本。


对于 Windows 安装:

运行 setup.py 进行包安装时,Python 2.7 会搜索已安装的 Visual Studio 2008。您可以VS90COMNTOOLS在调用之前在环境变量中设置正确的路径,以诱使 Python 使用较新的 Visual Studio setup.py

根据安装的Visual Studio版本执行以下命令:

  • Visual Studio 2010 (VS10):SET VS90COMNTOOLS=%VS100COMNTOOLS%

  • Visual Studio 2012 (VS11):SET VS90COMNTOOLS=%VS110COMNTOOLS%

  • Visual Studio 2013 (VS12):SET VS90COMNTOOLS=%VS120COMNTOOLS%

  • Visual Studio 2015 (VS14):SET VS90COMNTOOLS=%VS140COMNTOOLS%


警告:如下所述,如果您尝试编译 python 模块,这个答案不太可能起作用。

有关详细信息,请参阅在 Windows 上为 Python 2.7 构建 lxml。

解决方案 2:

我找到了解决方案。我在安装“amara”时遇到了完全相同的问题和错误。我安装了 mingw32,但需要配置 distutils。

  1. 我已经安装了 Python 2.6。

  2. 我安装了 mingw32 到C:programsmingw

  3. 将 mingw32 的 bin 目录添加到环境变量中:附加c:programsMinGWin;PATH

  4. 编辑(如果不存在则创建)distutils.cfg文件,文件位于C:Python26Libdistutilsdistutils.cfg

[build]
compiler=mingw32
  1. 现在运行easy_install.exe amara

通过打开新的 来确保环境已设置cmd.exe

解决方案 3:

您可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/安装编译版本

解决方案 4:

如果您想使用 Visual Studio C++ 而不是 mingw 进行编译...

  1. 运行python.exe显示它是用哪个版本的 VC++ 编译的(下面的示例显示了)。

使用与 Python 编译时对应的 Visual C++ 编译器版本非常重要,因为distilutils可以防止混合get_build_version版本(根据 Piotr 的警告)。

* 黄色(顶部)是 Python 2.7,使用 MSC v.1500(Visual Studio C++ 2008)编译
* 红色(底部)是 Python 3.4.1,使用 MSC v.1600(Visual Studio C++ 2010)编译![命令行示例显示使用 MSC v.1500 编译的 Python 2.7 和使用 MSC v.1600 编译的 Python 3.4.1](https://i.sstatic.net/jzygw.png)
  1. 使用下表[1]将内部 VC++ 版本与相应的 Visual Studio 版本进行匹配:

MSC v.1000 -> Visual C++ 4.x        
MSC v.1100 -> Visual C++ 5          
MSC v.1200 -> Visual C++ 6          
MSC v.1300 -> Visual C++ .NET       
MSC v.1310 -> Visual C++ .NET 2003  
MSC v.1400 -> Visual C++ 2005  (8.0)
MSC v.1500 -> Visual C++ 2008  (9.0)
MSC v.1600 -> Visual C++ 2010 (10.0)
MSC v.1700 -> Visual C++ 2012 (11.0)
MSC v.1800 -> Visual C++ 2013 (12.0)
MSC v.1900 -> Visual C++ 2015 (14.0)
MSC v.1910 -> Visual C++ 2017 (15.0)
MSC v.1911 -> Visual C++ 2017 (15.3)
MSC v.1912 -> Visual C++ 2017 (15.5)
MSC v.1913 -> Visual C++ 2017 (15.6)
MSC v.1914 -> Visual C++ 2017 (15.7)
MSC v.1915 -> Visual C++ 2017 (15.8)
MSC v.1916 -> Visual C++ 2017 (15.9)   
  1. 下载并安装上一步中相应版本的 Visual Studio C++。

下面列出了特定版本的 VC++ 的附加说明。

Visual Studio C++ 2008 说明

对于32 位编译器,请下载Visual Studio C++ 2008 Express Edition。

对于 64 位编译器2,请下载适用于 Windows 7 的 Windows SDK 和 .NET Framework 3.5 SP1。

  • 取消选中所有选项,但Developer Tools >> Visual C++ Compilers为了节省安装不需要的 SDK 工具的时间和磁盘空间除外。

Visual Studio C++ 2010 说明

据 Microsoft 称,如果您安装了 Visual Studio 2010 SP1,它可能已删除 VC++ 的编译器和库。

如果是这种情况,请下载Visual C++ 2010 SP1 编译器更新。

Visual Studio C++ 2015 说明

如果您不需要 Visual Studio IDE,请下载Visual Studio C++ 2015 Build Tools。

Visual Studio C++ 2017 说明

如果您不需要 Visual Studio IDE,请下载Build Tools for Visual Studio 2017。

建议:如果您同时安装了 32 位和 64 位 Python,您可能还想使用virtualenv创建单独的 Python 环境,这样您就可以一次使用其中一个,而不必弄乱您的路径来选择要使用哪个 Python 版本。

根据@srodriguex 的说法,您可以跳过手动加载批处理文件(步骤 4-6),而是按照此答案将一些批处理文件复制到 Python 搜索的位置。 如果这不起作用,以下是最初对我有用的步骤。

  1. 打开一个cmd.exe

  2. 在尝试安装需要 C 扩展的东西之前,请运行以下批处理文件将 VC++ 编译器的环境加载到会话中(即环境变量、编译器的路径等)。

执行:

* 32 位编译器:


*注意*:32 位 Windows 安装仅具有`C:Program Files`预期



> `"C:Program Files (x86)Microsoft Visual Studio 9.0Common7Toolssvars32.bat"`
* 64 位编译器:



> `"C:Program Files (x86)Microsoft Visual Studio 9.0Common7Toolssvars64.bat"`


*注意*:是的,原生 64 位编译器位于 中`Program Files (x86)`。不要问我为什么。此外,如果您想知道和  

 之间的区别,或者更重要的是和之间的区别,前者是原生 64 位编译器工具,后者是可以在 32 位 Windows 安装上运行的 64 位交叉编译器。`vcvars64.bat``vcvarsx86_amd64.bat``amd64``x86_amd64`**更新:**  

如果出于某种原因,您得到了error: ... was unexpected at this time.一系列...字符,那么您需要检查路径变量中是否存在任何无关字符,例如额外的引号或杂散字符。如果批处理文件无法理解您的会话路径,它将无法更新它。

  1. 如果一切顺利,您应该会收到以下消息之一,具体取决于您运行的 VC++ 版本和命令:

对于 32 位编译器工具:

Setting environment for using Microsoft Visual Studio 20xx x86 tools.

对于 64 位编译器工具:

Setting environment for using Microsoft Visual Studio 20xx x64 tools.

  1. 现在python setup.py install,通过或运行安装程序pip install pkg-name

  2. 希望并祈祷行星能够正确排列以便 VC++ 能够合作。

解决方案 5:

发生了什么?Python 模块可以部分用 C 或 C++ 编写(通常是为了提高速度)。如果您尝试使用 Pip(或)安装这样的包setup.py,它必须从源代码编译该 C/C++。开箱即用,Pip 会厚颜无耻地假设您安装了编译器 Microsoft Visual C++。如果您没有,您将看到这个神秘的错误消息“错误:无法找到 vcvarsall.bat”。

建议的解决方案是安装 C/C++ 编译器,可以是 Microsoft Visual C++ 或MinGW(一个开源项目)。但是,安装和配置这两种编译器都非常困难。(2014 年编辑:微软发布了一个针对 Python 2.7 的专用C++ 编译器)

最简单的解决方案是使用 Christoph Gohlke 的 Windows 安装程序 (.msi) 来安装流行的 Python 包。他为 Python 2.x 和 3.x、32 位和 64 位构建了安装程序。您可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/下载它们


如果您也认为“错误:无法找到 vcvarsall.bat”是一个荒谬而神秘且无用的讯息,那么请在http://bugs.python.org/issue2943上评论该错误,以将其替换为更有用且用户友好的讯息。

相比之下,Ruby 附带一个包管理器 Gem,并提供了一个准官方的 C/C++ 编译器 DevKit。如果你尝试在没有它的情况下安装包,你会看到这个有用的友好消息:

请更新您的 PATH 以包含构建工具或从http://rubyinstaller.org/downloads下载 DevKit并按照http://github.com/oneclick/rubyinstaller/wiki/Development-Kit上的说明进行操作

你可以在https://stackoverflow.com/a/13445719/284795上阅读有关 Python 打包的更多内容

解决方案 6:

您需要安装 Microsoft 编译器,该编译器与用于构建 Python 的编译器兼容。这意味着您需要 Visual C++ 2008(或更新版本,需要进行一些调整)。

微软现在提供了一个捆绑的编译器和标头,以便能够编译 Python 扩展,网址如下:

适用于 Python 2.7 的 Microsoft Visual C++ 编译器

http://aka.ms/vcpython27

这是一个相对较小的软件包;下载后仅需 85MB,无需管理员权限即可安装,无需重启。名称有点误导,该编译器适用于最初使用 Visual C++ 2008 编译的任何 Python 版本,而不仅仅是 Python 2.7。

如果您启动 Python 交互式提示或打印sys.version,请查找MSC版本字符串;如果是,MSC v.1500您可以使用此工具。

从distutils 列表的原始公告来看:

微软发布了 Python 2.7 的编译器包,方便人们在 Windows 上构建和分发 C 扩展模块。Microsoft Visual C++ Compiler for Python 2.7(又名 VC9)可从以下网址获取:http ://aka.ms/vcpython27

此软件包包含为 Python 2.7 32 位和 64 位构建 C 扩展模块所需的所有工具和头文件(请注意,某些扩展模块需要第三方依赖项,例如未包含在内 OpenSSL 或 libxml2)。使用 Visual C++ 2008 构建的其他 Python 版本也受支持,因此“Python 2.7”只是广告 - 它可以与 2.6 和 3.2 配合使用。

请注意,您需要安装setuptools6.0 或更新版本(在下载页面的系统要求中列出)。您正在安装的项目必须使用setuptools.setup(),而不是distutils,否则自动检测将不起作用。

微软表示他们希望保持 URL 稳定,以便自动化脚本可以轻松引用它。

解决方案 7:

我刚刚遇到了同样的问题,所以我会在这里讲述我的故事,希望它能够帮助其他遇到同样问题的人,并为他们节省我刚刚花费的几个小时:

我在 Windows 7 机器中安装了 mingw(g++ (GCC) 4.6.1)和 python 2.7.3,并且正在尝试安装 PyCrypto。

一切都是从运行 setup.py install 时出现这个错误开始的:

error: Unable to find vcvarsall.bat

通过指定 mingw 作为首选编译器,在谷歌上搜索错误后即可轻松解决:

setup.py install build --compiler=mingw32

问题是我收到了一个不同的错误:

configure: error: cannot run C compiled programs.

事实证明,我的防病毒软件阻止了新编译的 .exe 的执行。我刚刚禁用了防病毒“常驻防护”,然后出现下一个错误:

cc1.exe: error: unrecognized command line option '-mno-cygwin' 
error: command 'gcc' failed with exit status 1

这解决了它:“要么安装稍旧版本的 MinGW,要么编辑 Python 目录中的 distutils\cygwinccompiler.py 以删除 -mno-cygwin 的所有实例。”(来自这里)

现在,我终于可以开始工作了。

解决方案 8:

看起来它正在寻找 VC 编译器,因此您可以尝试使用 提及编译器类型-c mingw32,因为您有 msys

python setup.py install -c mingw32

解决方案 9:

我有 python 2.73 和 windows 7。对我有用的解决方案是:

  1. 将 mingw32 的 bin 目录添加到环境变量中:在PATH中附加C:programsmingwin;

  2. 创建位于的distutils.cfgC:Python27Libdistutilsdistutils.cfg,包含:

[build]
compiler=mingw32

为了解决 MinGW 不再识别 -mno-cygwin 标志的问题,请删除 C:\Python27\Lib\distutils\cygwincompiler.py 第 322 行至 326 行中的标志,使其看起来像这样:

  self.set_executables(compiler='gcc -O -Wall',
                         compiler_so='gcc -mdll -O -Wall',
                         compiler_cxx='g++ -O -Wall',
                         linker_exe='gcc',
                         linker_so='%s %s %s'
                                    % (self.linker_dll, shared_option,
                                       entry_point))

解决方案 10:

查看setup.py您尝试安装的软件包的文件。如果是较旧的软件包,则可能是导入distutils.core.setup()而不是setuptools.setup()

我在 2015 年就遇到了这个问题,原因如下:

  1. 适用于 Python 2.7 的 Microsoft Visual C++ 编译器,来自http://aka.ms/vcpython27

  2. 使用的一个较旧的包distutils.core.setup()

  3. 尝试去做python setup.py build而不是使用pip

如果您使用较新版本的 pip,它将强制 (monkeypatch) 软件包使用 setuptools,即使它setup.py调用 distutils。但是,如果您不使用 pip,而是只执行python setup.py build,则构建过程将使用distutils.core.setup(),它不知道编译器的安装位置。


解决方案

步骤 1:打开适当的 Visual C++ 2008 命令提示符

打开“开始”菜单或“开始”屏幕,搜索“Visual C++ 2008 32 位命令提示符”(如果您的 Python 是 32 位)或“Visual C++ 2008 64 位命令提示符”(如果您的 Python 是 64 位)。运行它。命令提示符应该在标题栏中显示 Visual C++ 2008 ...。

第 2 步:设置环境变量

在刚刚打开的命令提示符中设置这些环境变量。

SET DISTUTILS_USE_SDK=1
SET MSSdk=1

参考http://bugs.python.org/issue23246

步骤 3:构建并安装

cd到您想要构建的包,然后运行python setup.py build,然后python setup.py install。如果您想安装到虚拟环境中,请在构建之前激活它。

解决方案 11:

也许有人会感兴趣,以下对我的 py2exe 包有用。 (我有 Windows 7 64 位和便携式 Python 2.7、带有适用于 Windows 7 的 Windows SDK 和 .NET Framework 4 的 Visual Studio 2005 Express)

set VS90COMNTOOLS=%VS80COMNTOOLS%

然后:

python.exe setup.py install

解决方案 12:

我花了将近两天的时间弄清楚如何在我的 Python 3.4 64 位版本中解决这个问题:Win32 上的 Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 位 (AMD64)]

解决方案 1,很难:(在阅读本文之前,请先阅读下面的解决方案 2)最后,这对我有帮助:

  1. 安装Visual C++ 2010 Express

  2. 为 Windows 7安装Microsoft Windows SDK v7.1

  3. 手动创建vcvars64.bat包含C:Program Files (x86)Microsoft Visual Studio 10.0VCinamd64文件CALL "C:Program FilesMicrosoft SDKsWindows 7.1BinSetEnv.cmd" /x64或其他路径,具体取决于您的安装位置

  4. (这似乎是可选的)安装Microsoft Visual Studio 2010 Service Pack 1以及适用于 Windows SDK 7.1 的 Microsoft Visual C++ 2010 Service Pack 1 编译器更新

  5. 之后我尝试pip install numpy但收到以下错误:

File "numpycoresetup.py", line 686, in get_mathlib_info
raise RuntimeError("Broken toolchain: cannot link a simple C program")
RuntimeError: Broken toolchain: cannot link a simple C program

mfinfo按照None这个C:Python34Libdistutilsmsvc9compiler.pyhttps://stackoverflow.com/a/23099820/4383472改为

  1. 最后,在pip install numpy命令之后,我的 avast 防病毒软件试图干扰安装过程,但我很快就禁用了它

numpy 编译花了很长时间——几分钟,我甚至认为有一个错误,但最后一切都正常。

解决方案 2,简单:(
我知道这种方法已经在一个高票答案中提到过,但让我重复一遍,因为它确实更简单)完成所有这些工作后,我明白对我来说最好的方法是将来使用来自http://www.lfd.uci.edu/~gohlke/pythonlibs/的已预编译的二进制文件。我极少可能需要此站点不包含的某些包(或包的某个版本)。安装过程也以这种方式更快。例如,要安装numpy

  1. 从该网站下载numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(如果你有 Python 3.4 64 位)

  2. 在命令提示符或 powershell 中使用 pip 安装它pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(或根据命令提示符的打开方式安装文件的完整路径)

解决方案 13:

我想在 Windows 10 上使用 Python 2.7 运行 pysph,但出现未找到 vcvarsall.bat 的情况(来自 distutils)

我的解决方案如下:

为 Python 2.7 安装 Microsoft Visual C++ (按照@Michael 的建议)

在 Windows 10 上它被安装到(我的用户名是 Andreas):

C:UsersAndreasAppDataLocalProgramsCommonMicrosoftVisual C++ for Python9.0

将环境变量VS90COMNTOOLS设置为 Visual C++ for Python 2.7 的安装路径(参见上述路径)。

如果仍然不起作用,则修改模块

C:/Python27/lib/distutils

文件msvc9compiler.py。在其中找到函数find_vcvarsall并进行如下修改。

替换以下行:

productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")

productdir = os.path.join(toolsdir)

在我的情况下,这就是 vcvarsall.bat 所在的位置(检查 vcvarsall.bat 在您的安装中的位置)。

解决方案 14:

当我尝试在 Python 3.5 上安装 numpy 库时遇到了这个问题。解决方案是安装 VS2015。我有 VS2008、2012、2013,但它们都不兼容 Python 3.5。显然,较新版本的 Python 依赖于较新版本的 VS。

还要确保 C++ Common Tools 和 Visual Studio 一起安装。

在此处输入图片描述

解决方案 15:

使用此链接下载并安装Visual C++ 2015 Build Tools。它将自动下载visualcppbuildtools_full.exe并安装Visual C++ 14.0,而无需实际安装 Visual Studio。安装完成后,重试 pip install,您将不会再收到错误。

我已经在以下平台和版本上进行了测试:

Python 3.6 on Windows 7 64-bit
Python 3.7 on Windows Server 2016 (64-bit system)
Python 3.8 on Windows 10 64-bit

解决方案 16:

我尝试了上述所有答案,发现它们都不起作用,这可能是因为我使用的是 Windows 8 并且安装了 Visual Studio 2012。在这种情况下,这就是你要做的。

vcvarsall.bat文件位于此处:
C:Program Files (x86)Microsoft Visual Studio 11.0VC

只需选择文件并复制即可。

然后进入这个目录:
C:Program Files (x86)Microsoft Visual Studio 11.0Common7Tools

并粘贴文件。然后,一切都应该顺利。

解决方案 17:

您可以从http://go.microsoft.com/?linkid=7729279下载免费的 Visual C++ 2008 Express Edition ,它将在安装期间设置 VS90COMNTOOLS 环境变量,从而使用兼容的编译器进行构建。

正如 @PiotrDobrogost 在评论中提到的那样,他对另一个问题的回答详细说明了为什么 Visual C++ 2008 是正确的构建工具,但随着 Windows 版本的 Python 迁移到较新版本的 Visual Studio,这种情况可能会发生变化:在 Windows 上为 Python 2.7 构建 lxml

解决方案 18:

我在 Windows 7 x64 上使用 Python 3.4.1 时遇到了这个问题,不幸的是,我需要的包没有合适的 exe 或 wheel 可供使用。该系统需要一些“解决方法”,详情如下(底部有 TLDR)。

使用上述 Jaxrtech 的回答中的信息,我确定我需要 Visual Studio C++ 2010 (sys.version 返回 MSC v.1600),因此我从他的回答中的链接安装了 Visual C++ 2010 Express,该链接是http://go.microsoft.com/?linkid=9709949。我安装了所有更新,但正如您在下面看到的,这是一个错误。此时只应安装 Express 的原始版本(不更新任何内容)。

vcvarsall.bat 现已存在,但安装包时出现新错误。query_vcvarsall raise ValueError(str(list(result.keys())))ValueError: [u'path']还有其他与此错误相关的 stackoverflow 问题,例如为 Python 2.7 构建/安装 C 模块时出现错误

我从该答案中确定 2010 Express 仅安装 32 位编译器。要获取 64 位(和其他)编译器,您需要安装 Windows 7.1 SDK。请参阅http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

但是,这对我来说无法安装,安装程序返回了错误installation failed with return code 5100。我在以下链接找到了解决方案:http://support.microsoft.com/kb/2717426。简而言之,如果安装了较新版本的 x86 和 x64 Microsoft Visual C++ 2010 Redistributable,它们会与 SDK 安装程序中的版本冲突,需要先卸载。

然后 SDK 就安装了,但是我注意到 vcvars64.bat 仍然不存在C:Program Files (x86)Microsoft Visual Studio 10.0VCin,也不存在于其子文件夹中。vcvarsall.bat 运行 vcvars64 批处理文件,因此如果没有它,python 包仍然无法安装(我忘记了此时显示的错误)。

然后我在这里找到了一些说明:http://www.cryptohaze.com/wiki/index.php/Windows_7_Build_Setup#Download_VS_2010_and_Windows_SDK_7.1
按照说明,我已经安装了 Express 和 7.1 SDK,因此安装了 SDK 7.1 SP1,并修复了缺失的头文件。然后我手动创建了 vcvars64.bat,内容为CALL setenv /x64。我将把所有这些说明粘贴在这里,这样它们就不会丢失。

步骤 1 是下载 Visual Studio Express 2010。

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express
是一个不错的起点。下载安装程序并运行它 (vc_web.exe)。您不需要另外下载 SQL 2008。

您还需要适用于 64 位编译器的 Windows SDK(当前为 7.1)- 除非您只想进行 32 位构建,因为 32 位构建不完全受支持...

http://www.microsoft.com/en-us/download/details.aspx?id=8279是下载此软件的一个很好的起点 - 下载后您需要运行 winsdk_web.exe!

这里的默认安装就很好。

最后,下载并安装 Windows SDK 7.1 SP1 更新:
http://www.microsoft.com/en-us/download/details.aspx? id=4422

并且,要修复丢失的头文件,VS2010 SP1。http
://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID =75568aa6-8107-475d-948a-ef22627e57a5

并且,该死,修复 VS2010 Express 丢失的批处理文件。这简直太荒谬了。

在 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 中,使用以下命令创建“vcvars64.bat”(您需要以管理员身份运行):

调用 setenv /x64

我的 python 包仍然没有安装(记不起错误)。然后我找到了一些使用特殊 SDK 7.1 命令提示符的说明(复制如下),请参阅: https: //mail.python.org/pipermail/distutils-sig/2012-February/018300.html

别介意这个问题。有人注意到菜单上有这个项:开始->所有程序->Microsoft Windows SDK v7.1->Windows SDK 7.1 命令提示符

这将运行一个批处理作业,该作业似乎会为编译器设置工作环境。从该提示符中,您可以输入“setup.py build”或“setup.py install”。

我按照提示打开了 Windows SDK 7.1 命令提示符,并用它在 python 包上运行 easy_install。最后,成功了!


总结

  1. 安装 Visual Studio Express 2010(最好没有更新的可再发行组件或 SQL 服务器)。

  2. 安装 Windows 7.1 SDK

  3. 安装 SDK 7.1 SP1 更新,以及 VS2010 SP1 头文件修复(此步骤可能不需要)。

  4. 手动创建C:Program Files (x86)Microsoft Visual Studio 10.0VCinamd64 cvars64.bat内容CALL setenv /x64

  5. 开始->所有程序->Microsoft Windows SDK v7.1->Windows SDK 7.1 命令提示符打开特殊的 x64 命令提示符,然后可与 python/easy_install/pip/etc(包括 virtual_envs 中的命令提示符)一起使用。

解决方案 19:

以下步骤为我解决了这个问题,我尝试使用 cython 扩展创建设置。

  1. 安装适用于 Python 2.7 的 Microsoft Visual C++ 编译器

  2. 默认安装位置是@C:\Users\PC-user\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python 这可能实际上会解决问题,请先测试一次再继续。

  3. 如果失败,请检查 VC++ 中 python 的 vcvarsall.bat 文件位于何处

  4. 在记事本中打开 distutils 包的 msvc9compiler.py 文件。

  5. 在我的系统中,这是 @ C:\Anaconda2\Lib\distutils\msvc9compiler.py 此文件中的 find_vcvarsall 函数,通过打印出版本参数来确定 VC 的版本。对于 Python 2.7,它可能是 9.0

  6. 现在创建一个环境变量 VS90COMNTOOLS,指向 C:\Users\PC-user\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\bin

  7. 由于某种原因,distutils 期望 vcvarsall.bat 文件位于 VC 目录中,但 VC++ for python 工具将其放在 9.0 的根目录中。要解决此问题,请从 path.join 中删除“VC”(大约在第 247 行左右)

`#productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
productdir = os.path.join(toolsdir, os.pardir, os.pardir)`

上述步骤为我解决了该问题。

解决方案 20:

调用import setuptools将对 distutils 进行 monkey patch 以强制与 Visual Studio 兼容。vcvars32.bat手动调用将设置虚拟环境并防止编译器抛出其他常见错误。对于 VS 2017,该文件位于

“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat”

下面是我用来快速将 .pyx 文件编译为 .pyd 的安装脚本:(注意:它使用第三方模块
send2trash

# cython_setup.py
import sys, os, time, platform, subprocess
from setuptools import setup, find_packages
from Cython.Build import cythonize
from traceback import format_exc

# USAGE:
#
#   from cython_setup import run
#   run(pyx_path)

# vcvars = r"C:Program Files (x86)Microsoft Visual Studio7CommunityVCAuxiliaryBuildcvars32.bat"

# NOTE: to use visual studio 2017 you must have setuptools version 34+
vcvars = r"C:Program Files (x86)Microsoft Visual Studio7BuildToolsVCAuxiliaryBuildcvars32.bat"


def _build_ext():
    try:
        pyx_path = sys.argv.pop(-1)
        pyx_path = os.path.abspath(pyx_path)
        if not os.path.exists(pyx_path):
            raise FileNotFoundError(f"{pyx_path} does not exist")
        project_name = sys.argv.pop(-1)
        os.chdir(os.path.abspath(os.path.dirname(pyx_path)))

        print("cwd: %s" % os.getcwd())
        print(os.path.abspath("build"))
        setup(
            name=project_name,
            # cmdclass = {'build_ext': build_ext},
            packages=find_packages(),
            # ext_modules=cythonize(extensions)
            ext_modules=cythonize(pyx_path,
                                  compiler_directives={'language_level': 3, 'infer_types': True, 'binding': False},
                                  annotate=True),
            # include_dirs = [numpy.get_include()]
            build_dir=os.path.abspath("build")
        )
    except:
        input(format_exc())


def retry(func):
    def wrapper(*args, **kw):
        tries = 0
        while True:
            try:
                return func(*args, **kw)
            except Exception:
                tries += 1
                if tries > 4:
                    raise
                time.sleep(0.4)

    return wrapper


@retry
def cleanup(pyx_path):
    from send2trash import send2trash
    c_file = os.path.splitext(pyx_path)[0] + ".c"
    if os.path.exists(c_file):
        os.remove(c_file)

    if os.path.exists("build"):
        send2trash("build")


def move_pyd_files(pyx_path):
    pyx_dir = os.path.dirname(pyx_path)
    build_dir = os.path.join(pyx_dir, "build")
    if not os.path.exists(build_dir):
        raise RuntimeError(f"build_dir {build_dir} did not exist....")
    found_pyd = False
    for top, dirs, nondirs in os.walk(build_dir):
        for name in nondirs:
            if name.lower().endswith(".pyd") or name.lower().endswith(".so"):
                found_pyd = True
                old_path = os.path.join(top, name)
                new_path = os.path.join(pyx_dir, name)
                if os.path.exists(new_path):
                    print(f"removing {new_path}")
                    os.remove(new_path)
                print(f"file created at {new_path}")
                os.rename(old_path, new_path)
    if not found_pyd:
        raise RuntimeError("Never found .pyd file to move")

def run(pyx_path):
    """
    :param pyx_path:
    :type pyx_path:
    :return: this function creates the batch file, which in turn calls this module, which calls cythonize, once done
    the batch script deletes itself... I'm sure theres a less convoluted way of doing this, but it works
    :rtype:
    """
    try:
        project_name = os.path.splitext(os.path.basename(pyx_path))[0]
        run_script(project_name, os.path.abspath(pyx_path))
    except:
        input(format_exc())


def run_script(project_name, pyx_path):
    dirname = os.path.dirname(pyx_path)
    # ------------------------------
    os.chdir(dirname)
    if os.path.exists(vcvars):
        #  raise RuntimeError(
        # f"Could not find vcvars32.bat at {vcvars}
is Visual Studio Installed?
Is setuptools version > 34?")
        subprocess.check_call(f'call "{vcvars}"', shell=True)

    cmd = "python" if platform.system() == "Windows" else "python3"
    subprocess.check_call(f'{cmd} "{__file__}" build_ext "{project_name}" "{pyx_path}"', shell=True)
    move_pyd_files(pyx_path)
    cleanup(pyx_path)


if len(sys.argv) > 2:
    _build_ext()

解决方案 21:

我尝试了很多解决方案,但只有一个对我有用,那就是安装 Microsoft Visual Studio 2008 Express C++。

我在使用 C 编写的 Python 2.7 模块(yEnc,它与 MS VS 存在其他问题)中遇到了这个问题。请注意,Python 2.7 是使用 MS VS 2008 版本构建的,而不是 2010 版本!

尽管它是免费的,但由于 MS 正在推广 VS 2010,所以很难找到。不过,MSDN 官方的直接链接仍然有效:检查https://stackoverflow.com/a/15319069/2227298获取下载链接。

解决方案 22:

如果你安装了 mingw

pip install --global-option build_ext --global-option --compiler=mingw32 packagename

有效,强制 pip 使用 mingw 编译器而不是 Microsoft 的编译器进行构建。有关详细信息,请参阅此处https://github.com/pypa/pip/issues/18(最后一篇文章)。

解决方案 23:

http://www.microsoft.com/en-us/download/details.aspx?id=44266上的 Microsoft Visual C++ Compiler for Python 2.7不是一个解决方案吗?

解决方案 24:

2016 年解决这个问题最简单的方法是安装 Chocolatey,然后安装 vcpython27包。打开 Powershell:

> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install python2 -y
> choco install vcpython27 -y

解决方案 25:

我不知道是否太晚了,但我找到了Microsoft Visual C++ Compiler for Python 2.7,上面写着

如果您需要此编译器包,您将收到的典型错误消息是无法找到 vcvarsall.bat

希望这有帮助!

解决方案 26:

可以在以下位置找到MS VС++ 版本和安装变体的详尽列表:由 正式支持distutils(以及部分由 提供setuptools以及如何使用它们

https://wiki.python.org/moin/WindowsCompilers

它还指定了哪个官方 Win32 Python 版本需要哪个 VC++ 版本。请注意,MinGW 不受官方支持(详情见下文)。

简而言之:

  • 对于每个版本,都有一个可立即使用的特定 Visual Studio 版本。

+ 请注意,2012 年之前的 Express 版本不支持 x64。尝试使用 x64 版本会导致难以理解的错误。
  • 对于独立 SDK,通常需要从 SDK 提示符运行安装(=设置环境变量)。

+ 对于某些人来说,可以通过一次性调整来取消此要求,且不会产生不利的副作用
  • 一些不常见的 VC++ 版本受 支持setuptools,而 不受 支持distutils

  • 据称MinGW可以“工作”,但只适用于 x86。https ://bugs.python.org/issue4709表示其支持问题在于 MinGW 本身,甚至从 Python 3.5 开始 x86 也必然会出现问题。

解决方案 27:

我遇到了同样的问题,目前正在解决。

“Google”告诉我,我需要安装“Microsoft Visual C++ Compiler for Python 2.7”。我不仅安装了该工具,还安装了 Visual C++ 2008 Reditributable,但没用。然后我尝试安装 Visual C++ 2008 Express Edition。问题就解决了!

只需尝试安装 Visual C++ 2008 Express Edition!

解决方案 28:

如果您想在安装 Visual Studio 的 Windows 机器上安装 pyodbc,另一个选择是使用二进制分发版手动安装 pyodbc。

如果您没有所使用机器的管理员权限并尝试设置虚拟环境,则此功能特别有用。

步骤:

  1. 从这里下载最新的 Windows 安装程序(pyodbc-XXXwin-Y-py2.7.exe)

  2. 使用 7-Zip(或 WinRAR 或其他)打开安装程序可执行文件

  3. 提取 pyodbc.pyd 和 pyodbc-XXX-py2.7.egg-info 并将它们放在[python installation directory or virtualenv]Libsite-packages

  4. 没有第 4 步 :)

解决方案 29:

对于 Python 3.4,依赖于 Visual Studio 2010。安装 Visual C++ 2010 Express 为我解决了这个问题。

诱骗它使用我碰巧拥有的 VS 2008 或 2013 安装,但没有起作用。

解决方案 30:

您可以使用 easy_install 代替 pip,它对我来说很有用。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用