【解决】Python出现找不到Installer\vswhere.exe的错误原因揭秘与解决方案

目录

一、前言

二、问题复盘

三、解决方式总结

3.1.Visual Studio 未安装或安装不完整

3.2.Python 版本兼容性问题

3.3.使用 Anaconda 安装 pandas

3.4.有效的解决方式

四、问题总结


一、前言

一直在使用Python3.10的版本,最近为了紧跟技术前沿想换一个最新的版本试一下,结果因为一个很蠢的失误导致部分python库一直安装报错,看了很多解决办法,最后才发现问题所在,因此记录一下,希望后面的小伙伴不会跟我踩一样的坑……

二、问题复盘

为了下载较新的Python版本,笔者这块直接在阿里云镜像库下载一个3.13.2的Python版本。

这里因为一个选择不慎导致后面问题就来了。

正常重新换了Python环境后在PyCharm中要重新配置python解释器,然后根据requirements.txt导入项目依赖包,本来一些框架或者常见的依赖包比如scrapy、selenium、time都是没问题的,但是pandas、matplotlib、psycopg2始终导入不了,都有同样的问题出现:

(venv) D:\pthon_project>pip install pandas
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Collecting pandas
  Using cached https://mirrors.aliyun.com/pypi/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz (4.4 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [12 lines of output]
      + meson setup C:\Users\young\AppData\Local\Temp\pip-install-a_1j2uls\pandas_bb255a5869374cdab93e149f95d43a96 C:\Users\young
\AppData\Local\Temp\pip-install-a_1j2uls\pandas_bb255a5869374cdab93e149f95d43a96\.mesonpy-toeo8vrs\build -Dbuildtype=release -Db_
ndebug=if-release -Db_vscrt=md --vsenv --native-file=C:\Users\young\AppData\Local\Temp\pip-install-a_1j2uls\pandas_bb255a5869374cdab93e149f95d43a96\.mesonpy-toeo8vrs\build\meson-python-native-file.ini
      The Meson build system
      Version: 1.2.1
      Source dir: C:\Users\young\AppData\Local\Temp\pip-install-a_1j2uls\pandas_bb255a5869374cdab93e149f95d43a96
      Build dir: C:\Users\young\AppData\Local\Temp\pip-install-a_1j2uls\pandas_bb255a5869374cdab93e149f95d43a96\.mesonpy-toeo8vrs\build
      Build type: native build
      Project name: pandas
      Project version: 2.2.3

      ..\..\meson.build:2:0: ERROR: Could not find C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe

      A full log can be found at C:\Users\young\AppData\Local\Temp\pip-install-a_1j2uls\pandas_bb255a5869374cdab93e149f95d43a96\.mesonpy-toeo8vrs\build\meson-logs\meson-log.txt
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

大概意思就是因为安装 pandas 时,有些依赖项的编译需要用到 Visual Studio 构建工具,而 vswhere.exe 正是用于定位 Visual Studio 安装位置的工具。

因此呢,带这个问题我查了很多解决相关问题的博客或者AI,普遍较多的都是根据他的要求安装Visual Studio或者版本不兼容,亦或者采用其他包管理工具。

三、解决方式总结

现有较多的方式归为几类,但是我个人不建议直接尝试

3.1.Visual Studio 未安装或安装不完整

pandas 安装过程中可能需要使用 Visual Studio 的 C++ 编译器,而 vswhere.exe 是用来查找 Visual Studio 安装路径的。若 Visual Studio 未安装或者安装不完整,就会找不到 vswhere.exe 文件。

意思就是安装一下Visual Studio,我个人认为方法也较为复杂:

首先,安装 Microsoft Visual C++ Build Tools:

  • 访问 https://visualstudio.microsoft.com/visual-cpp-build-tools/
  • 下载并安装 "Build Tools for Visual Studio"
  • 在安装程序中,选择 "Desktop development with C++"
  • 但是我个人基本不用这玩意,并且之前使用3.10的时候也没下载过Visual Studio,所以不可能就上升了3个版本不到就这么大区别吧,因此单纯是因为懒,所以放弃了这种方式,甚至没有一点想尝试的欲望。

    类似的如果有Visual Studio环境变量配置问题:即Visual Studio 已经安装,若环境变量配置不正确,Python 安装包时也可能无法找到 vswhere.exe。

    或者安装路径被更改:在安装 Visual Studio 时,你自定义了安装路径,使得 vswhere.exe 不在默认的查找路径中。

    还有文件被误删或损坏问题vswhere.exe 文件可能被意外删除或者由于系统问题导致文件损坏,无法被正常访问。这些全部PASS,太复杂了,懒得研究。

    3.2.Python 版本兼容性问题

    不同版本的 Python 对依赖项的编译环境要求可能不同。Python 3.13.2 可能对 Visual Studio 构建工具的依赖更严格,所以在更换 Python 版本后,这个问题就暴露出来了。

    所以我个人也查看了一下pandas的版本信息,并将几个大一点的版本试了一下:

    (venv) D:\pthon_project>pip index versions pandas 
    WARNING: pip index is currently an experimental command. It may be removed/changed in a future release without prior warning.
    pandas (2.2.3)
    Available versions: 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.4, 2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 1.5.3, 1.5.2, 1.5.
    1, 1.5.0, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0, 1.3.5, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 
    1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0, 0.25.3, 0.25.2, 0.25.1, 0.25.0, 0.24.2, 0.24.
    1, 0.24.0, 0.23.4, 0.23.3, 0.23.2, 0.23.1, 0.23.0, 0.22.0, 0.21.1, 0.21.0, 0.20.3, 0.20.2, 0.20.1, 0.20.0, 0.19.2, 0.19.1, 0.19.0
    , 0.18.1, 0.18.0, 0.17.1, 0.17.0, 0.16.2, 0.16.1, 0.16.0, 0.15.2, 0.15.1, 0.15.0, 0.14.1, 0.14.0, 0.13.1, 0.13.0, 0.12.0, 0.11.0,
     0.10.1, 0.10.0, 0.9.1, 0.9.0, 0.8.1, 0.8.0, 0.7.3, 0.7.2, 0.7.1, 0.7.0, 0.6.1, 0.6.0, 0.5.0, 0.4.3, 0.4.2, 0.4.1, 0.4.0, 0.3.0, 0.2, 0.1
      INSTALLED: 2.2.3
      LATEST:    2.2.3
    

    结果就是并无卵用。该出现的问题仍然存在,所以版本不兼容不太可能导致直接安装失败,除非是numpy和cv2那种的,但是那也不会造成直接在pip这个步骤报错。因此这个方式也被PASS

    3.3.使用 Anaconda 安装 pandas

    这种也是网上存在的一种方式,Conda 是一个开源的包、依赖项及环境管理系统,适用于多种语言(如 Python、R、Ruby、Lua、Scala 等)。

    Conda 与 Python 的 pip 包管理工具不同,pip 主要用于管理 Python 包,而 Conda 不仅可以管理 Python 包,还可以管理其他语言的包,并且更侧重于环境管理。此外,Conda 可以处理二进制包的安装,而 pip 主要从 Python Package Index(PyPI)下载和安装源代码包。

    所以理论上可以通过Anaconda 会自动处理依赖项,避免编译问题。但是我认为下载一个新的包管理工具,太麻烦了,所以也PASS了。

    以上这几种我不采用的原因就是我认为,Python语言不太可能研发者会在3.10转3.13时会对pandas这种较为常用的依赖项产生较大的改动而导致pip安装失败。

    3.4.有效的解决方式

    所以我最后决定看一下是不是Python版本有点问题,导致有严重的兼容性问题。于是我打印了一下刚下载的Python版本信息确定一下是否正确安装,并检查一下装的版本跟我win10的系统是否匹配呢。

    (venv) D:\pthon_project>python --version
    Python 3.13.2
    
    (venv) D:\pthon_project>python -c "import struct; print( 8 * struct.calcsize('P'))"
    32
    

    结果人傻了,搞半天下载的Python版本就不对,和我本身的电脑硬件架构不一样!!!

    因为目前大多数常见的Windows 10的PC设备是传统的 x86 或 x64 架构,因此在下载Pyhton时需要选择带有amd64字样的 64 位安装文件,如果是基于 ARM 架构的(例如一些 Surface Pro X 等 ARM 版设备),那么就需要下载 ARM64 版本的 Python 安装文件。

    而阿里云那个没带后缀的exe文件默认是32位的。所以根本原因就是版本下错了,不适配PC架构

    所以就是导致我们电脑配备的是 64 位操作系统,然而运行的却是 32 位的 Python。

    要知道,许多第三方库是基于 64 位 Python 构建的。当 32 位 Python 尝试安装这些第三方库时,在读取注册表信息以获取必要的安装配置时,往往只能得到空集。

    即便我们将 vswhere.exe 文件复制到报错提示的对应文件夹中,由于注册表内记录的信息与实际文件状况不匹配,Python 在安装第三方库时还是会不可避免地报错。

    所以最后我们卸载python-3.13.2.exe的Python后选择python-3.13.2-amd64.exe的安装包安装即可。后面再安装pandas,psycopg2就不会出现pip安装失败的问题了。

    四、问题总结

    这次使用 pip 安装库时遭遇问题,虽说初始原因看似简单,但就因为这点疏忽,而耗费大量时间排查问题。而且网上不少问题说明存在错误信息,这让问题解决过程更加曲折。

    这也给大家提个醒,以后遇到库安装问题,建议优先排查系统兼容性问题。就像我这次,错装了不兼容的包,看了些与根本原因无关的解决方式,幸好没下载工具补丁,但是也白白浪费了精力。望后面的同学能引以为戒~

    作者:深情不及里子

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【解决】Python出现找不到Installer\vswhere.exe的错误原因揭秘与解决方案

    发表回复