编译Cython代码时出现“错误:无法找到vcvarsall.bat”

18

此处所建议的,我已成功安装了Microsoft Visual C++ Compiler for Python 2.7以编译一些Cython代码,但是:

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("module1.pyx"))

仍然会产生以下错误:

error: 找不到vcvarsall.bat

如何在Python 2.7下编译Cython代码(例如在Windows 7 x64上)?

注意:我已经仔细阅读了问题error: Unable to find vcvarsall.bat,但是主要答案(包括修改msvc9compiler.py)都没有解决它。


@NewEnglandcottontail:python -m pip install --upgrade setuptools不就能解决你的问题吗?另外,你安装的VStudio版本是什么? - CristiFati
3个回答

32

我花了好几个小时才找到error: Unable to find vcvarsall.bat的信息,所以我在这里使用“回答自己的问题”功能发布了它:

  • Step 1: Install Microsoft Visual C++ Compiler for Python 2.7

  • Remark: You don't need to modify msvc9compiler.py as often suggested in many forum posts

  • Step 2: Just add import setuptools that will help Python and "Microsoft Visual C++ Compiler for Python 2.7" work together.

    import setuptools  # important
    from distutils.core import setup
    from Cython.Build import cythonize
    setup(ext_modules=cythonize("module1.pyx", build_dir="build"),
                                               script_args=['build'], 
                                               options={'build':{'build_lib':'.'}})
    

    Note: the script_args parameter allows to run this setup.py with just python setup.py (i.e. CTRL+B in your favorite editor like Sublime Text) instead of having to pass command-line arguments like this: python setup.py build.

它有效了!


5
只需加入 "import setuptools" 就可以消除错误。 - Brana
第一步中的链接不再可用 :( - Lucas Baldo

8

2
“Visual Studio 2019的构建工具”链接导致我下载整个Visual Studio。这是有意的吗? - Idonknow
@Idonknow,是的,Visual Studio的构建工具下载链接包含整个Visual Studio,但在安装过程中,您可以选择要安装的软件包。我建议使用Chocolatey,因为它更加简单易用! - KV88
如果您的安装在虚拟环境中怎么办? - Jürgen K.
好问题,我不认为我有答案。我猜你仍然需要在整个系统上安装C++编译器?! - KV88
Visual Studio的安装程序要求6.46GB的空间来安装C++构建工具!!! - Yehdhih ANNA
2
@Yehdhih ANNA,这就是为什么我建议使用chocolatey,正如我在上面的回答以及对Idonknow问题的回复中所提到的一样! - KV88

0
我用的解决方案是使用Git Bash并输入以下命令:
INCLUDE="C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt/;C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared/" \
> LIB="C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/ucrt/x64;C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64" \
> PATH=$PATH:/c/Program\ Files\ \(x86\)/Windows\ Kits/10/bin/10.0.22621.0/x64 \
> python -m pip install <package>

然后运行python setup.py build_ext --inplace

Git Bash会检测到Visual Studio Cmd,但Anaconda不会。我正在运行Microsoft Visual Studio 2022、Microsoft Visual Studio Tools和Microsoft Visual 2017 v 14.00。

我尝试了一些理论上的解决方案,但并没有帮助我,但其他人说下面的方法有效:

这个问题存在的原因是因为微软造成的。很可能是路径问题,而且自2018年以来,这个问题一直在出现,这是微软的专长。

https://github.com/pypa/setuptools/issues/3329

这可能对你有用,但再次提醒,这是微软的东西:

import setuptools  # as requested
import distutils._msvccompiler

你也可以更改/检查注册表:

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.2\Setup\VC]
"ProductDir"="C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Auxiliary\\Build"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\Setup\VC]
"ProductDir"="C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Auxiliary\\Build"

另一个选择是检查正确的环境变量,以及删除您不需要或不使用的任何和所有 Visual Studio 文件。
环境变量路径可删除旧文件,并在之后重新启动电脑。
    C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64_arm
    C:\Users\AAAAA\AppData\Local\Programs\Microsoft VS Code\bin
    C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64

使用Anaconda并使用以下命令:

    SET DISTUTILS_USE_SDK=1 & "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64

https://learn.microsoft.com/en-us/answers/questions/419525/microsoft-visual-c-140-or-greater-is-required.html

注释不适合进行长时间讨论;此对话已被移至聊天室 - Samuel Liew

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