【解决】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:
但是我个人基本不用这玩意,并且之前使用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
安装库时遭遇问题,虽说初始原因看似简单,但就因为这点疏忽,而耗费大量时间排查问题。而且网上不少问题说明存在错误信息,这让问题解决过程更加曲折。
这也给大家提个醒,以后遇到库安装问题,建议优先排查系统兼容性问题。就像我这次,错装了不兼容的包,看了些与根本原因无关的解决方式,幸好没下载工具补丁,但是也白白浪费了精力。望后面的同学能引以为戒~
作者:深情不及里子