npm 和 pip 安裝中常見問題總結

安裝路徑的疑惑: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.pswp.cn/web/67818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67818.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人工智能:農業領域的變革力量

在當今科技飛速發展的時代,人工智能正以前所未有的態勢滲透進各個領域,農業也不例外。想象一下,未來的農田里,農民不再是彎腰勞作的形象,而是坐在高科技的“智能農場”里,悠閑地喝著咖啡,指揮著…

LLM的Deep Research功能:重構人類認知與創新的新范式

在人工智能迅速發展的今天,大語言模型(LLM)的deep research功能正在成為重構人類認知方式的關鍵力量。 這一突破性的技術進展不僅帶來了工具層面的革新,更深刻地觸及了人類認知能力的本質。 本文將從認知科學的視角出發&#xf…

【Cadence仿真技巧學習筆記】求解65nm庫晶體管參數un, e0, Cox

在設計放大器的第一步就是確定好晶體管參數和直流工作點的選取。通過閱讀文獻,我了解到L波段低噪聲放大器的mos器件最優寬度計算公式為 W o p t . p 3 2 1 ω L C o x R s Q s p W_{opt.p}\frac{3}{2}\frac{1}{\omega LC_{ox}R_{s}Q_{sp}} Wopt.p?23?ωLCox?Rs…

前端力扣刷題 | 6:hot100之 矩陣

73. 矩陣置零 給定一個 m x n 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 法一: var setZeroes function(matrix) {let setX new Set(); // 用于存儲需要置零的行索引let setY new Set(); //…

每日一題——有效括號序列

有效括號序列 題目描述數據范圍:復雜度要求: 示例題解代碼實現代碼解析1. 定義棧和棧操作2. 棧的基本操作3. 主函數 isValid4. 返回值 時間和空間復雜度分析 題目描述 給出一個僅包含字符 (, ), {, }, [, ] 的字符串,判斷該字符串是否是一個…

集合通訊概覽

(1)通信的算法 是根據通訊的鏈路組成的 (2)因為通信鏈路 跟硬件強相關,所以每個CCL的庫都不一樣 芯片與芯片、不同U之間是怎么通信的!!!!!! 很重要…

紅黑樹的封裝

一、封裝思路 在 STL 中 map set 的底層就是封裝了一棵紅黑樹。 其中連接紅黑樹和容器的是迭代器,map set 暴露出的接口都不是自己寫的,而是紅黑樹寫的,外部接口封裝紅黑樹接口。 所以寫出紅黑樹為 map set 寫的接口,再在上層的…

java異常處理——try catch finally

單個異常處理 1.當try里的代碼發生了catch里指定類型的異常之后,才會執行catch里的代碼,程序正常執行到結尾 2.如果try里的代碼發生了非catch指定類型的異常,則會強制停止程序,報錯 3.finally修飾的代碼一定會執行,除…

使用QMUI實現用戶協議對話框

使用QMUI實現用戶協議對話框 懶加載用于初始化 TermServiceDialogController 對象。 懶加載 lazy var 的作用 lazy var dialogController: TermServiceDialogController {let r TermServiceDialogController()r.primaryButton.addTarget(self, action: #selector(primaryC…

C++進階: 紅黑樹及map與set封裝

紅黑樹總結整理 紅黑色概述: 紅黑樹整理與AVL樹類似,但在對樹的平衡做控制時,AVL樹會比紅黑樹更嚴格。 AVL樹是通過引入平衡因子的概念進行對樹高度控制。 紅黑樹則是對每個節點標記顏色,對顏色進行控制。 紅黑樹控制規則&…

在Qt中,slots 關鍵字有什么用?

有下面的Qt代碼&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr…

列表標簽(無序列表、有序列表)

無序列表 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…

Kanass基礎教程-創建項目

Kanass是一款國產開源免費的項目管理工具&#xff0c;工具簡潔易用&#xff0c;開源免費&#xff0c;之前介紹過kanass的一些產品簡介及安裝配置方法&#xff0c;本文就從如何創建第一個項目來開始kanass上手之旅吧。 1. 創建項目 點擊項目->項目添加 按鈕進入項目添加頁面…

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.10 ndarray內存模型:從指針到緩存優化

2.10 ndarray內存模型&#xff1a;從指針到緩存優化 目錄 #mermaid-svg-p0zxLYqAnn59O2Xe {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-p0zxLYqAnn59O2Xe .error-icon{fill:#552222;}#mermaid-svg-p0zxLYqAnn59O…

80-《紅球姜》

紅球姜 紅球姜&#xff08;學名&#xff1a;Zingiber zerumbet (L.) Smith&#xff09;是姜科姜屬多年生草本植物&#xff0c;根莖塊狀&#xff0c;株高可達2米。葉片披針形至長圓狀披針形&#xff0c;無柄或短柄&#xff1b;總花梗長可達30厘米&#xff0c;花序球果狀&#xf…

Hive之數據定義DDL

Hive之數據定義DDL 文章目錄 Hive之數據定義DDL寫在前面創建數據庫查詢數據庫顯示數據庫查看數據庫詳情切換當前數據庫 修改數據庫刪除數據庫創建表管理表(內部表)外部表管理表與外部表的互相轉換 修改表重命名表增加、修改和刪除表分區增加/修改/替換列信息 刪除表 寫在前面 …

DeepSeek 核心技術全景解析

DeepSeek 核心技術全景解析&#xff1a;突破性創新背后的設計哲學 DeepSeek的創新不僅僅是對AI基礎架構的改進&#xff0c;更是一場范式革命。本文將深入剖析其核心技術&#xff0c;探討 如何突破 Transformer 計算瓶頸、如何在 MoE&#xff08;Mixture of Experts&#xff09…

UE 5.3 C++ 對垃圾回收的初步認識

一.UObject的創建 UObject 不支持構造參數。 所有的C UObject都會在引擎啟動的時候初始化&#xff0c;然后引擎會調用其默認構造器。如果沒有默認的構造器&#xff0c;那么 UObject 將不會編譯。 有修改父類參數的需求&#xff0c;就使用指定帶參構造 // Sets default value…

點擊WPS 任務欄上的圖標,不是馬上進入工作頁面,而是呈現多個文檔頁面選擇時的處理方法

問題&#xff1a; 點擊WPS以后不是直接進入 解決&#xff1a; 首頁-配置和修復工具-高級-兼容設置-改為與microsoft office 2010兼容(D)

批量處理多個模型的預測任務

#!/bin/bash# 檢查是否傳入必要的參數&#xff0c;若未傳入參數則打印用法并退出 if [ "$#" -lt 1 ]; thenecho "用法: $0 <file_path>"echo "示例: $0 /home/aistudio/work/PaddleSeg/city/cityscapes_urls_extracted.txt"exit 1 fi# 讀取…