记一次 python模块distutils缺失导致vue2 项目 npm install失败

记一次 python模块distutils缺失导致vue2 项目 npm install失败

环境

项目Value
操作系统Darwin 23.5.0
芯片M3
node版本v16.18.0
node-gypv9.1.
npm版本v8.19.2

错误描述

运行npm installcnpm install一直提示deasync模块有问题

npm ERR! gyp ERR! command "/usr/local/bin/node" "/VSCodeProjects/myvue2/node_modules/.bin/node-gyp" "rebuild"
npm ERR! gyp ERR! cwd /VSCodeProjects/myvue2/node_modules/deasync
npm ERR! gyp ERR! node -v v16.13.2
npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! gyp ERR! not ok 
npm ERR! Build failed

错误详情

xxx@xxxMacBook-Pro myvue2 % npm install
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
npm WARN deprecated request-promise-native@1.0.9: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated @hapi/bourne@1.3.2: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/topo@3.1.6: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated eslint-loader@2.2.1: This loader has been deprecated. Please use eslint-webpack-plugin
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated consolidate@0.15.1: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated left-pad@1.3.0: use String.prototype.padStart()
npm WARN deprecated w3c-hr-time@1.0.2: Use your platform's native performance.now() and performance.timeOrigin.
npm WARN deprecated sane@4.1.0: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added
npm WARN deprecated fsevents@1.2.13: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated html-webpack-plugin@3.2.0: 3.x is no longer supported
npm WARN deprecated babel-eslint@10.1.0: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated @hapi/address@2.1.4: Moved to 'npm install @sideway/address'
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated @hapi/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/joi@15.1.1: Switch to 'npm install joi'
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm ERR! code 1
npm ERR! path /VSCodeProjects/myvue2/node_modules/deasync
npm ERR! command failed
npm ERR! command sh -c -- node ./build.js
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@9.1.0
npm ERR! gyp info using node@16.18.0 | darwin | arm64
npm ERR! gyp info find Python using Python version 3.12.4 found at "/opt/homebrew/opt/python@3.12/bin/python3.12"
npm ERR! gyp WARN EACCES current user ("xxx") does not have permission to access the dev dir "/xxx/Library/Caches/node-gyp/16.18.0"
npm ERR! gyp WARN EACCES attempting to reinstall using temporary dev dir "/var/folders/fs/tylrysm95vxcjf_stf2n8_pm0000gn/T/.node-gyp"
npm ERR! gyp info spawn /opt/homebrew/opt/python@3.12/bin/python3.12
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   '/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args   'binding.gyp',
npm ERR! gyp info spawn args   '-f',
npm ERR! gyp info spawn args   'make',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/VSCodeProjects/myvue2/node_modules/deasync/build/config.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/var/folders/fs/tylrysm95vxcjf_stf2n8_pm0000gn/T/.node-gyp/16.18.0/include/node/common.gypi',
npm ERR! gyp info spawn args   '-Dlibrary=shared_library',
npm ERR! gyp info spawn args   '-Dvisibility=default',
npm ERR! gyp info spawn args   '-Dnode_root_dir=/var/folders/fs/tylrysm95vxcjf_stf2n8_pm0000gn/T/.node-gyp/16.18.0',
npm ERR! gyp info spawn args   '-Dnode_gyp_dir=/usr/local/lib/node_modules/npm/node_modules/node-gyp',
npm ERR! gyp info spawn args   '-Dnode_lib_file=/var/folders/fs/tylrysm95vxcjf_stf2n8_pm0000gn/T/.node-gyp/16.18.0/<(target_arch)/node.lib',
npm ERR! gyp info spawn args   '-Dmodule_root_dir=/VSCodeProjects/myvue2/node_modules/deasync',
npm ERR! gyp info spawn args   '-Dnode_engine=v8',
npm ERR! gyp info spawn args   '--depth=.',
npm ERR! gyp info spawn args   '--no-parallel',
npm ERR! gyp info spawn args   '--generator-output',
npm ERR! gyp info spawn args   'build',
npm ERR! gyp info spawn args   '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! Traceback (most recent call last):
npm ERR!   File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py", line 42, in <module>
npm ERR!     import gyp  # noqa: E402
npm ERR!     ^^^^^^^^^^
npm ERR!   File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 9, in <module>
npm ERR!     import gyp.input
npm ERR!   File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 19, in <module>
npm ERR!     from distutils.version import StrictVersion
npm ERR! ModuleNotFoundError: No module named 'distutils'
npm ERR! gyp ERR! configure error 
npm ERR! gyp ERR! stack Error: `gyp` failed with exit code: 1
npm ERR! gyp ERR! stack     at ChildProcess.onCpExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:284:16)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
npm ERR! gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:293:12)
npm ERR! gyp ERR! System Darwin 23.5.0
npm ERR! gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd /VSCodeProjects/myvue2/node_modules/deasync
npm ERR! gyp ERR! node -v v16.18.0
npm ERR! gyp ERR! node-gyp -v v9.1.0
npm ERR! gyp ERR! not ok 
npm ERR! Build failed

npm ERR! A complete log of this run can be found in:
npm ERR! /xxx/.npm/_logs/2024-08-27T09_11_46_919Z-debug-0.log

解决方案

这两个模块通常与 distutils 相关,并且对于构建 Python 扩展模块是必须的

# 不一定需要
# python3 -m ensurepip --upgrade

# 使用清华源下载缺少的Python依赖
python3 -m pip install --upgrade setuptools wheel -i https://pypi.tuna.tsinghua.edu.cn/simple --break-system-packages

注意:运行pip3安装包时,出现error: externally-managed-environment
添加命令参数解决--break-system-packages

参考文章

<think>好的,我现在需要解决用户在Python环境中遇到的distutils模块缺失的问题,具体是ModuleNotFoundError: No module named 'distutils.errors'。首先,我得回忆一下distutils模块Python中的位置和作用。 用户提到引用了三个相关的资料,其中引用[1]和[2]都提到了distutils.errors.DistutilsError的问题,可能涉及到setuptools和pip的安装问题。引用[3]则涉及到Visual C++的问题,不过这可能和当前问题不太相关,但可能需要考虑环境配置的问题。 首先,distutilsPython的标准库之一,通常在Python安装时自带。但是,在某些情况下,比如使用精简版的Python或者某些Linux发行版,可能会将distutils作为单独的包来管理。例如,在Ubuntu中,可能需要安装python3-distutils或类似的包。 接下来,用户遇到ModuleNotFoundError,说明Python找不到distutils模块。可能的原因包括: 1. Python安装不完整,可能缺少distutils模块2. 在虚拟环境中,没有正确继承系统站点的包,导致distutils不可用。 3. 系统包管理的问题,比如在Linux上需要单独安装distutils包。 根据引用[1]和[2],用户可能在安装某些包时遇到了问题,可能需要安装setuptools或升级pip。此外,安装scm(setuptools_scm)可能也是一个解决步骤。而引用[3]提到的C++ Build Tools可能是在安装需要编译的包时的问题,但和distutils缺失可能相关,因为distutils负责构建扩展模块,如果系统缺少编译工具,可能会导致问题,不过当前的问题更直接的是模块缺失。 解决办法可能包括: 1. 确保Python安装完整,或者在Linux上安装对应的distutils包。 2. 使用系统的包管理器安装python3-distutils(适用于Debian/Ubuntu)。 3. 在虚拟环境中重新安装或链接distutils模块。 4. 安装或升级setuptools和pip,因为setuptools依赖distutils,可能触发其安装。 需要一步步引导用户检查Python环境,安装必要的包。比如,在Ubuntu系统下,用户可能需要运行sudo apt-get install python3-distutils。如果是Windows,可能需要重新安装Python并确保勾选了安装所有组件。对于虚拟环境,可能需要指定--system-site-packages或者重新创建虚拟环境。 同时,用户可能混淆了distutils.errors的错误和setuptools的缺失,所以需要明确问题的根源。例如,当安装setuptools时,如果distutils缺失,安装过程会失败,从而导致其他依赖安装的问题。因此,确保distutils存在是前提条件。 另外,引用[1]中的解决办法提到了安装scm、升级pip、安装setuptools,这可能是在解决其他依赖问题时的步骤,但需要明确这些步骤是否有助于解决distutils缺失的问题。例如,升级pip可能帮助获取最新的包,但无法直接解决distutils缺失的问题,因为distutilsPython标准库的一部分,不通过pip安装。 总结步骤可能包括: 1. 检查Python安装是否完整,重新安装Python并确保包含所有组件。 2. 对于Linux用户,安装python3-distutils包。 3. 确保setuptools和pip是最新版本,使用pip install --upgrade setuptools pip。 4. 创建虚拟环境时,使用--system-site-packages参数。 5. 如果问题依旧,尝试手动安装distutils模块,不过通常这不是推荐的做法,因为它是标准库的一部分。 需要验证这些步骤的正确性,例如,在Ubuntu中安装python3-distutils是否能解决问题。此外,用户可能需要确认他们的Python环境是否被正确配置,或者是否存在多个Python版本导致的问题。 最后,生成相关问题时要围绕distutils模块的安装、修复,以及可能遇到的依赖问题,比如如何检查Python安装是否完整,如何在不同的操作系统中安装distutils,如何处理虚拟环境中的模块缺失等。</think>### 解决Python中`distutils`模块缺失问题的方法 #### 1. 确认Python安装完整性 `distutils`是Python标准库的一部分,通常随Python默认安装。若出现`ModuleNotFoundError`,可能是Python安装不完整。 - **Windows/macOS**:重新安装Python时,勾选**“Install launcher for all users”**和**“Add Python to PATH”**,确保安装完整组件[^1]。 - **Linux**:使用系统包管理器安装完整Python环境,例如: ```bash sudo apt-get install python3-full # Debian/Ubuntu ``` #### 2. Linux系统单独安装`distutils` 某些Linux发行版将`distutils`拆分为独立包,需手动安装: ```bash sudo apt-get install python3-distutils # Debian/Ubuntu sudo dnf install python3-devel # Fedora ``` #### 3. 升级`setuptools`和`pip` 若`distutils`存在但功能异常,升级工具链可能修复问题: ```bash python -m pip install --upgrade pip setuptools ``` #### 4. 虚拟环境配置 若在虚拟环境中报错,尝试: ```bash # 创建虚拟环境时关联系统包 python -m venv --system-site-packages myenv # 或重新安装setuptools source myenv/bin/activate pip install setuptools ``` #### 5. 手动修复(备用方案) 若上述方法无效,可手动下载并安装`distutils`源码(不推荐,仅限高级用户): ```bash git clone https://github.com/pypa/distutils.git cd distutils python setup.py install ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值