Windows系统下使用pip安装库时构建依赖失败求助
问题描述
每次用pip安装Python库都出错,pip和Setuptools已更新至最新版本。在Windows系统执行pip install scikit-learn或pip install -U matplotlib时,均会在构建依赖环节失败,错误核心为distutils.errors.DistutilsPlatformError: VC 6.0 不被此模块支持,完整错误日志如下:
PS C:\Users\zaida\Documents\ML> pip install scikit-learn 正在收集scikit-learn 使用缓存的scikit-learn-1.3.2.tar.gz (7.5 MB) 安装构建依赖...错误 error: subprocess-exited-with-error × 用于安装构建依赖的pip子进程未成功运行。 │ 退出代码: 1 ╰─> [70行输出] 忽略oldest-supported-numpy: 标记'python_version != "3.10" or platform_system != "Windows" or platform_python_implementation == "PyPy"'与您的环境不匹配 正在收集setuptools 使用缓存的setuptools-69.0.3-py3-none-any.whl.metadata (6.3 kB) 正在收集wheel 使用缓存的wheel-0.42.0-py3-none-any.whl.metadata (2.2 kB) 正在收集Cython<3.0,>=0.29.33 使用缓存的Cython-0.29.37-py2.py3-none-any.whl.metadata (3.1 kB) 正在收集numpy==1.22.3 使用缓存的numpy-1.22.3.zip (11.5 MB) 安装构建依赖: 已启动 安装构建依赖: 完成,状态为'done' 获取构建wheel所需依赖: 已启动 获取构建wheel所需依赖: 完成,状态为'error' error: subprocess-exited-with-error 获取构建wheel所需依赖未成功运行。 退出代码: 1 [40行输出] Traceback (most recent call last): 文件"C:\wang\mingw64\lib\python3.10\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py",第353行,在<module>中 main() 文件"C:\wang\mingw64\lib\python3.10\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py",第335行,在main中 json_out['return_val'] = hook(**hook_input['kwargs']) 文件"C:\wang\mingw64\lib\python3.10\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py",第112行,在get_requires_for_build_wheel中 backend = _build_backend() 文件"C:\wang\mingw64\lib\python3.10\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py",第77行,在_build_backend中 obj = import_module(mod_path) 文件"C:\wang\mingw64\lib\python3.10\importlib\__init__.py",第126行,在import_module中 return _bootstrap._gcd_import(name[level:], package, level) 文件"<frozen importlib._bootstrap>",第1050行,在_gcd_import中 文件"<frozen importlib._bootstrap>",第1027行,在_find_and_load中 文件"<frozen importlib._bootstrap>",第992行,在_find_and_load_unlocked中 文件"<frozen importlib._bootstrap>",第241行,在_call_with_frames_removed中 文件"<frozen importlib._bootstrap>",第1050行,在_gcd_import中 文件"<frozen importlib._bootstrap>",第1027行,在_find_and_load中 文件"<frozen importlib._bootstrap>",第1006行,在_find_and_load_unlocked中 文件"<frozen importlib._bootstrap>",第688行,在_load_unlocked中 文件"<frozen importlib._bootstrap_external>",第887行,在exec_module中 文件"<frozen importlib._bootstrap>",第241行,在_call_with_frames_removed中 文件"C:\Users\zaida\AppData\Local\Temp\pip-build-env-dpsds_li\overlay\lib\python3.10\site-packages\setuptools\__init__.py",第242行,在<module>中 monkey.patch_all() 文件"C:\Users\zaida\AppData\Local\Temp\pip-build-env-dpsds_li\overlay\lib\python3.10\site-packages\setuptools\monkey.py",第99行,在patch_all中 patch_for_msvc_specialized_compiler() 文件"C:\Users\zaida\AppData\Local\Temp\pip-build-env-dpsds_li\overlay\lib\python3.10\site-packages\setuptools\monkey.py",第162行,在patch_for_msvc_specialized_compiler中 patch_func(*msvc9('find_vcvarsall')) 文件"C:\Users\zaida\AppData\Local\Temp\pip-build-env-dpsds_li\overlay\lib\python3.10\site-packages\setuptools\monkey.py",第149行,在patch_params中 mod = import_module(mod_name) 文件"C:\wang\mingw64\lib\python3.10\importlib\__init__.py",第126行,在import_module中 return _bootstrap._gcd_import(name[level:], package, level) 文件"<frozen importlib._bootstrap>",第1050行,在_gcd_import中 文件"<frozen importlib._bootstrap>",第1027行,在_find_and_load中 文件"<frozen importlib._bootstrap>",第1006行,在_find_and_load_unlocked中 文件"<frozen importlib._bootstrap>",第688行,在_load_unlocked中 文件"<frozen importlib._bootstrap_external>",第887行,在exec_module中 文件"<frozen importlib._bootstrap>",第241行,在_call_with_frames_removed中 文件"C:\Users\zaida\AppData\Local\Temp\pip-build-env-dpsds_li\overlay\lib\python3.10\site-packages\setuptools\_distutils\msvc9compiler.py",第295行,在<module>中 raise DistutilsPlatformError("VC 6.0 不被此模块支持") distutils.errors.DistutilsPlatformError: VC 6.0 不被此模块支持 [输出结束] note: 此错误源自子进程,大概率与pip无关。 error: subprocess-exited-with-error 获取构建wheel所需依赖未成功运行。 退出代码: 1 详见上方输出。 note: 此错误源自子进程,大概率与pip无关。 [输出结束] note: 此错误源自子进程,大概率与pip无关。 error: subprocess-exited-with-error × 用于安装构建依赖的pip子进程未成功运行。 │ 退出代码: 1 ╰─> 详见上方输出。 note: 此错误源自子进程,大概率与pip无关。
解决方案
方法1:强制使用预编译wheel包(最简单)
直接执行以下命令,跳过源码编译步骤,下载现成的Windows预编译包:
pip install scikit-learn matplotlib --only-binary :all:
方法2:替换为官方CPython版本
当前使用的是MinGW编译的Python,在Windows下易与MSVC工具链冲突,建议替换为官方版本:
- 卸载当前MinGW的Python
- 下载对应版本(3.10)的Windows官方Python安装包,安装时勾选"Add Python to PATH"
- 重启终端后,重新执行
pip install scikit-learn matplotlib
方法3:安装兼容的MSVC编译工具(若必须源码编译)
如果需要源码编译依赖,需安装对应版本的MSVC工具链:
- 先确保setuptools和wheel为最新版:
pip install -U setuptools wheel - 安装Visual Studio Build Tools,选择"Desktop development with C++"工作负载,包含MSVC v142及以上版本工具链
- 重启终端,待环境变量生效后再执行安装命令
内容的提问来源于stack exchange,提问作者Ahmed Zaidan
相关产品推荐
相关产品推荐

