(2019.11.22已解决)Cython出现error:Unable to find vcvarsall.bat

  • Cython

    通过CythonPython代码转为C代码以及发布Python模块出过程中出错。

    即通过Cython编译pypyx文件:

    在这里插入图片描述

  • 背景名词解释

    • Microsoft Visual C++ : 简称Visual C++、MSVC、VC++或VC,它是微软公司开发的Windows平台下的C++开发工具,具有集成开发环境,可以用来编辑和编译C、C++以及C++/CLI等编程语言。
    • Microsoft Visual Studio : 简称VS,它是美国微软公司的开发工具包系列产品,它是一个基本完整的开发工具集,包含了整个软件生命周期中所需要的大部分工具,如UML工具,代码管控工具,也包括上面这个集成开发环境Microsoft Visual C++。
    • 内部版本号: 由上可见VS是包含VC的,另外它们之间版本是有对应关系的,这个对应关系是由微软的内部版本来控制的,上面的报错信息 “Microsoft Visual C++ 9.0” 中的 9.0就是Microsoft Visual C++的一个内部版本。我们可以根据这个内部版本找到对应的VC版本是什么,以及对应的VS版本是什么。
    VS与VC及内部版本的对应关系如下:
    VS名称内部版本VC名称
    Visual Studio4.0Visual C++ 4.0
    Visual Studio 975.0Visual C++ 5.0
    Visual Studio 6.06.0Visual C++ 6.0
    Visual Studio .NET 20027.0Visual C++ 2002
    Visual Studio .NET 20037.1Visual C++ 2003
    Visual Studio 20058.0Visual C++ 2005
    Visual Studio 20089.0Visual C++ 2008
    Visual Studio 201010.0Visual C++ 2010
    Visual Studio 201211.0Visual C++ 2012
    Visual Studio 201312.0Visual C++ 2013
    Visual Studio 201413.0Visual C++ 2014
    Visual Studio 201514.0Visual C++ 2015
    Visual Studio 2015 RTM14.0Visual C++ 2015
  • 问题解释

    没有找到vcvarsall.bat指定的vc++编译器进行编译。因为在windows平台下,cython是调用vc++编译器对生成的c文件进行bi生成编译,从而生成pyd文件的。

    这种问题是因为C编译器相关的配置没有设置好。

    具体本机要求哪个VC++版本,在下述文件中查看:

    .../Python37/Lib/distutils/msvccompiler.py
    

    找到如下函数:

    在这里插入图片描述

    其中提到,2.3版本以后,需要的VC版本在sys.version中,进入cmd >> python >> import sys >> sys.version进行查看:

    在这里插入图片描述

    其中MSC.v后面那个数字1900就是编译当前Python所使用的VC的版本信息,但还不是我们要找的那个内部版本号,我们要从这个版本信息中找到主版本号majorVersion和次版本号minorVersionmajorVersion + minorVersion的结果才是我们要找那个内部版本号。那么这里的majorVersionminorVersion怎么获取到呢?我们可以从上面的get_build_version()函数中找到答案:

    majorVersion = int(s[:-2]) - 6
    minorVersion = int(s[2:3]) / 10.0
    # s就是上面的1900
    majorVersion = 19 - 6 = 13
    minorVersion = 00 / 10.0 = 0
    

    所以,内部版本号就是majorVersion + minorVersion = 13 + 0.0 = 13.0,根据上述对照表,

    对应VS2014VC2014

    查看程序中,确实没有2014

    在这里插入图片描述

    但,问题是,我找不到VS2014,通过这里介绍,Python3.6对应VS2015

    PythonMicrosoft Visual StudioCPthon
    Python 2.7Microsoft Visual Studio 2008[MSC v.1500 64 bit (AMD64)]
    Python 3.4Microsoft Visual Studio 2010[MSC v.1600 64 bit (AMD64)]
    Python 3.5Microsoft Visual Studio 2015[MSC v.1900 64 bit (AMD64)]
    Python 3.6Microsoft Visual Studio 2015[MSC v.1900 64 bit (AMD64)]
    Python 3.7Microsoft Visual Studio 2015[MSC v.1912 64 bit (AMD64)]

    先偷个懒,下载小一点的Visual C++ Redistributable for Visual Studio 2015,安装显示已经有了,安装失败。

    因此下载安装Microsoft Visual Studio 2015,问题解决。

  • References

  1. Windows下安装Python扩展模块提示“Unable to find vcvarsall.bat”的问题
  2. CPython 各版本与 Microsoft 微软 Visual Studio 版本之间对应关系
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 如果你在安装PIL时遇到了"ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)"的错误提示,这可能是因为你所使用的pip命令无法找到满足要求的PIL版本。 为了解决这个问题,你可以尝试使用特定版本的cython来安装,比如0.29.33版本。你可以使用以下命令来安装特定版本的cython: "pip3 install cython==0.29.33 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com"。 通过指定cython的版本来安装PIL,你可能能够解决"ERROR: Could not find a version that satisfies the requirement PIL"的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)解决方案](https://blog.csdn.net/weixin_43178406/article/details/130536747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [CentOs安装包显示ERROR: Could not find a version that satisfies the requirement cython](https://blog.csdn.net/m0_53771468/article/details/129757871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值