npm 和 pip 安装中常见问题总结

devtools/2025/2/5 3:25:06/

安装路径的疑惑:NPM 和 PIP 的安装机制

NPM 安装路径规则:
  • 依赖安装在项目目录下: 当你运行 npm install --save-dev jest,它会在当前目录(例如 F:\)下创建一个 node_modules 文件夹,把 jest 安装在这个文件夹里。同时,它会创建或更新 package.json 文件来记录安装的依赖。

    例子:

    • F:\my_project 运行 npm install jest,Jest 会安装到 F:\my_project\node_modules 里。
    • 如果你换到 C:\another_project 目录,之前在 F:\ 安装的 Jest 是无法直接使用的,需要在 C:\another_project 重新安装。
  • 全局安装: 如果你希望在所有目录都能使用 jest,可以使用全局安装:

    npm install -g jest
    

    这样 jest 会安装到全局环境,之后在任意目录下都能运行 jest 命令。


PIP 安装路径规则(Python 包管理器):
  • 默认安装到系统或虚拟环境的 site-packages: 当你运行 pip install package_name,包会安装到 Python 的 site-packages 目录,而不是你当前所在的磁盘目录。安装路径与运行命令的磁盘无关。

    例子:

    • C:\ 运行 pip install requests 和在 F:\ 运行,效果是一样的,都会安装到 Python 默认的 site-packages 目录。
  • 虚拟环境中的安装: 如果你创建了一个 虚拟环境,例如在 F:\env,激活这个环境后运行 pip install,包会被安装到这个虚拟环境内。只有在激活这个环境时,才能使用这些包。

    全局与虚拟环境的区别

    • 全局安装:任何地方都能用。
    • 虚拟环境安装:只有在特定环境中能用,便于项目隔离。

3. 总结:NPM vs PIP 安装行为

特点NPM (Node.js)PIP (Python)
默认安装位置当前项目目录的 node_modules 文件夹Python 的 site-packages 目录(与磁盘无关)
全局安装需加 -g 参数 (npm install -g package)需加 --user 参数 (pip install --user package)
跨项目使用全局安装可跨项目使用,局部安装仅限当前目录全局安装默认可用,虚拟环境安装仅限当前环境
虚拟环境默认每个项目独立依赖,类似虚拟环境需要手动创建虚拟环境 (python -m venv env)

你可以通过以下几种方法查看 Python 的 site-packages 目录位置:

1. 使用 site 模块

在终端(命令行)中输入以下命令:

python -m site

输出结果会显示类似以下内容:

sys.path = ['...','/usr/local/lib/python3.10/site-packages','...',
]
USER_BASE: '/home/username/.local' 
USER_SITE: '/home/username/.local/lib/python3.10/site-packages' 
ENABLE_USER_SITE: True
  • site-packages 目录就是 /usr/local/lib/python3.10/site-packagesUSER_SITE 显示的路径。

2. 使用 sysconfig 模块

在终端中输入:

python -m sysconfig

输出中找到 site-packages 相关路径,例如:

'purelib': '/usr/local/lib/python3.10/site-packages',
'platlib': '/usr/local/lib/python3.10/site-packages',

3. 使用 Python 代码获取路径

如果你在 Python 解释器中运行,可以用以下代码:

import site
print(site.getsitepackages())  # 查看全局 site-packages 目录print(site.getusersitepackages())  # 查看当前用户的 site-packages 目录

输出类似:

['C:\\Python310\\Lib\\site-packages']
C:\Users\YourUsername\AppData\Roaming\Python\Python310\site-packages

4. 在虚拟环境中查看 site-packages

如果你在虚拟环境(venv)中,可以用以下命令查看:

python -c "import sys; print([p for p in sys.path if 'site-packages' in p])"

输出会类似:

['F:\\my_virtual_env\\Lib\\site-packages']

这表示在 F:\my_virtual_env\Lib\site-packages 目录下安装了 Python 包。


5. PIP 查看安装路径

你还可以用 pip 查看包的安装路径,运行:

pip show 包名

例如,查看 requests 包的安装路径:

pip show requests

输出:

Location: C:\Python310\Lib\site-packages

总结

  • 全局安装路径:使用 python -m siteimport site 查看。
  • 用户安装路径:使用 site.getusersitepackages() 查看。
  • 虚拟环境路径:激活虚拟环境后使用 sys.pathpip show 查看。

Node.js 和 npm 安装中常见问题总结

1. 安装路径选择

问题
安装 Node.js 时,选择将其安装到 D:\Programming\Node.json,但 npm 的全局包却默认安装到了 C:\Users\Acer\AppData\Roaming\npm\node_modules

原因

  • Node.js 的安装路径和 npm 全局包的存储路径是独立的。
  • npm 默认将全局包安装在用户目录 (AppData) 中,以便多项目共享,并避免系统权限问题。

解决方案

  • 如果希望将全局包安装到 Node.js 的安装目录,可以修改 npm config
    npm config set prefix "D:\Programming\Node.json\node_modules"
    
  • 检查和确认全局路径是否设置正确:
    npm root -g
    

2 删除错误的 prefix 配置:
npm config delete prefix
  1. 如果命令无法删除,手动编辑 .npmrc 文件:

    • 查找配置文件路径:
      npm config get userconfig
      
    • 打开该文件,删除或修改 prefix 设置:
  2. 重新设置正确路径:

    npm config set prefix "D:\Programming\Node.json\node_modules\npm\lib"
    

3 环境变量未更新

问题
修改 prefix 路径后,全局安装的命令行工具(如 nodemon, eslint)无法使用。

原因

  • 修改全局路径后,没有将新的 bin 目录添加到系统环境变量,导致命令行找不到工具。

解决方案

  1. Path 中添加:

    D:\Programming\Node.json\node_modules\npm\lib\bin
    
  2. 重启命令行窗口,确保环境变量生效。

总结


正确配置项目使用的测试框架

  • 安装 Node.js 时:可以安装到任意盘符,但全局包路径和环境变量需要根据实际需求调整。
  • 修改 npm 配置:使用 npm config set prefix 修改全局路径,或手动编辑 .npmrc 文件。
  • 环境变量配置:确保将新的 bin 路径添加到系统环境变量中,避免全局工具无法使用的问题。

  • 关键点:

  • 全局配置 (D:\Programming\Node.json\node_modules\npm) 只影响 Node.js 的全局行为,不会影响你具体项目的测试运行
  • 我们需要修改的是你项目目录下的 package.json 文件,即:
    F:\course\engineering\2025-group-24\package.json
  • 找到你的项目 package.json 文件,修改项目的 package.json  打开该文件,找到 scripts 部分,修改为:

  • "scripts": {"test": "jest"
    }
    
  • 运行测试:在终端中,确保你位于项目目录:

    cd F:\course\engineering\2025-group-24
    npm test
    
  • 不要修改全局 npmpackage.json,它只影响全局行为,和项目测试无关。修改项目目录下的 package.json,这样 Jest 才能在项目中运行。

http://www.ppmy.cn/devtools/156158.html

相关文章

MySQL为什么默认引擎是InnoDB ?

大家好,我是锋哥。今天分享关于【MySQL为什么默认引擎是InnoDB ?】面试题。希望对大家有帮助; MySQL为什么默认引擎是InnoDB ? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认引擎是 InnoDB,主要…

第五章:元婴-React用户功能实战

文章目录 登录页面布局JWT 令牌鉴权用户功能实现用户查询页面用户更改状态用户添加页面用户添加页面表单构建用户编辑页面用户编辑表单页面登录页面布局 import React, { useEffect, useState } from react import { Button, Form, Input, message } from antd import style fr…

第三周 树

猫猫和企鹅 分数 10 全屏浏览 切换布局 作者 姜明欣 单位 河北大学 王国里有 nn 个居住区,它们之间有 n−1 条道路相连,并且保证从每个居住区出发都可以到达任何一个居住区,并且每条道路的长度都为 1。 除 1号居住区外,每个居…

DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力

论文链接: [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 实在太长,自行扔到 Model 里,去翻译去提问吧。 工作原理: 主要技术,就是训练出一些专有用途小模型&…

记忆化搜索和动态规划 --最长回文子串为例

记忆化搜索 记忆化搜索是一种优化递归算法的方法,通过将已经计算过的子问题的结果存储起来(通常使用哈希表或数组),避免重复计算相同的子问题。 本质上是通过缓存中间结果来减少计算的重复性。 动态规划 动态规划是通过将问题分…

[STM32 标准库]定时器输出PWM配置流程 PWM模式解析

前言: 本文内容基本来自江协,整理起来方便日后开发使用。MCU:STM32F103C8T6。 一、配置流程 1、开启GPIO,TIM的时钟 /*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟RCC_APB2PeriphClockC…

MATLAB中lineBoundary函数用法

目录 语法 说明 示例 匹配行的边界 匹配行的开头和结尾边界 对行的边界求反 lineBoundary函数的功能是匹配行首或行尾。 语法 pat lineBoundary pat lineBoundary(type) 说明 pat lineBoundary 创建与一行的行首或行尾(包括 newline 字符)匹…

使用 Kotlin 将 Vertx 和 Springboot 整合

本篇文章目的是将 Springboot 和 Vertx 进行简单整合。整合目的仅仅是为了整活,因为两个不同的东西整合在一起提升的性能并没有只使用 Vertx 性能高,因此追求高性能的话这是在我来说不推荐。而且他们不仅没有提高很多性能甚至增加了学习成本 一、整合流…