python -m pip install xxx和pip install xxx的區(qū)別
背景:
最近執(zhí)行python代碼發(fā)現(xiàn)使用python -m venv vllm-ascend-env方式創(chuàng)建了python虛擬環(huán)境,也使用source vllm-ascend-env/bin/activate方式激活了環(huán)境,但是使用pip install時總是報錯。
原因:
在 Python 環(huán)境中,python -m pip install … 和直接 pip install … 的核心區(qū)別在于pip 解釋器的歸屬 / 執(zhí)行上下文,這會直接影響包的安裝路徑、版本匹配,甚至導(dǎo)致 “裝了但用不了” 的問題。
詳解
在 Python 環(huán)境中,python -m pip install ... 和直接 pip install ... 的核心區(qū)別在于pip 解釋器的歸屬/執(zhí)行上下文,這會直接影響包的安裝路徑、版本匹配,甚至導(dǎo)致“裝了但用不了”的問題。以下是詳細(xì)拆解:
一、核心原理:誰在執(zhí)行 pip?
| 命令形式 | 執(zhí)行邏輯 |
|---|---|
| python -m pip install | 顯式調(diào)用當(dāng)前 python 指向的解釋器,加載其內(nèi)置的 pip 模塊執(zhí)行命令。 |
| pip install | 調(diào)用系統(tǒng) PATH 環(huán)境變量中第一個匹配的 pip 可執(zhí)行文件,與 python 可能脫節(jié)。 |
二、具體差異(關(guān)鍵場景)
1. 版本匹配:避免“python 和 pip 不是一對”
- 當(dāng)系統(tǒng)安裝了多個 Python 版本(如 Python 3.8、3.10、3.12,或 Anaconda/虛擬環(huán)境),python 命令的指向和 pip 命令的指向可能不一致:
- 例:python --version 是 3.10,但 pip --version 綁定的是 3.8 → 直接 pip install 會把包裝到 3.8 的目錄,而 3.10 無法使用。
- 而 python -m pip 強(qiáng)制使用當(dāng)前 python 對應(yīng)的 pip(3.10 的 pip),確保包裝到 3.10 的 site-packages 目錄,版本完全匹配。
2. 路徑優(yōu)先級:解決“pip 升級后自己失效”
升級 pip 本身時(如你的命令 --upgrade pip),這個差異尤為明顯:
- 直接 pip install --upgrade pip:
升級的是 PATH 中 pip 可執(zhí)行文件對應(yīng)的 pip 版本,但升級過程中可能覆蓋當(dāng)前 pip 可執(zhí)行文件,導(dǎo)致“升級后 pip 命令報錯”(如 ModuleNotFoundError: No module named pip)。 - python -m pip install --upgrade pip:
基于當(dāng)前 python 解釋器升級其內(nèi)置的 pip 模塊,升級后的 pip 會直接關(guān)聯(lián)到該 python,不會出現(xiàn)“升級后 pip 失效”的問題(因?yàn)槭峭ㄟ^解釋器加載模塊,而非直接調(diào)用可執(zhí)行文件)。
3. 虛擬環(huán)境:避免“裝到全局環(huán)境”
在虛擬環(huán)境中:
- 激活虛擬環(huán)境后,
python和pip理論上會綁定到虛擬環(huán)境,但如果手動修改過PATH,或忘記激活虛擬環(huán)境:pip install可能穿透到全局 Python 環(huán)境(裝到系統(tǒng)級 site-packages);python -m pip則嚴(yán)格遵循當(dāng)前python指向(虛擬環(huán)境內(nèi)的解釋器),確保包裝在虛擬環(huán)境中。
4. Windows 特殊場景:解決“pip 命令找不到”
Windows 系統(tǒng)中,Python 安裝時若未勾選“Add Python to PATH”,pip 可執(zhí)行文件不會出現(xiàn)在 PATH 中 → 直接敲 pip 會提示“不是內(nèi)部或外部命令”,但 python -m pip 仍能正常執(zhí)行(因?yàn)?python 若能調(diào)用,就能加載其內(nèi)置的 pip 模塊)。
三、總結(jié):什么時候該用哪種?
| 推薦用 python -m pip | 可直接用 pip install |
|---|---|
| 系統(tǒng)有多個 Python 版本 | 系統(tǒng)僅裝一個 Python,且 pip 和 python 版本一致 |
| 升級 pip/setuptools/wheel 本身 | 簡單安裝第三方包(如 pip install requests) |
| 虛擬環(huán)境中(尤其是忘記激活時) | 確認(rèn) pip --version 和 python --version 匹配 |
| Windows 系統(tǒng)(避免 PATH 配置問題) | 非 Windows 系統(tǒng)(如 Linux/macOS)且環(huán)境干凈 |
四、驗(yàn)證方法(避免踩坑)
執(zhí)行以下命令,確認(rèn) pip 和 python 歸屬一致:
# 查看 python 指向的版本 python --version # 查看 pip 綁定的 python 版本 pip --version # 用 python -m 查看 pip 版本(絕對準(zhǔn)確) python -m pip --version
如果 pip --version 顯示的 Python 版本和 python --version 不一致,必須用 python -m pip,否則包會裝錯位置。
最終結(jié)論
你的命令是升級 pip/setuptools/wheel,強(qiáng)烈建議加 python -m:
python -m pip install --upgrade pip setuptools wheel
這能避免升級后 pip 失效、版本不匹配等問題,是跨平臺、多版本環(huán)境下最穩(wěn)妥的寫法。
到此這篇關(guān)于python -m pip install xxx和pip install xxx的區(qū)別的文章就介紹到這了,更多相關(guān)python -m pip install xxx和pip install xxx內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch模型轉(zhuǎn)onnx模型實(shí)例
今天小編就為大家分享一篇Pytorch模型轉(zhuǎn)onnx模型實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python對多個sheet表進(jìn)行整合實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于Python對多個sheet表進(jìn)行整合實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-04-04
Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接
這篇文章主要給大家介紹了Python學(xué)習(xí)小技巧之列表項(xiàng)的拼接的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-05-05
Python正則表達(dá)式re.compile()和re.findall()詳解
re?模塊提供了不少有用的函數(shù),用以匹配字符串,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式re.compile()和re.findall()的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
python opencv將圖片轉(zhuǎn)為灰度圖的方法示例
這篇文章主要介紹了python opencv將圖片轉(zhuǎn)為灰度圖的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
django admin管理工具自定義時間區(qū)間篩選器DateRangeFilter介紹
這篇文章主要介紹了django admin管理工具自定義時間區(qū)間篩選器DateRangeFilter介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python實(shí)現(xiàn)的txt文件去重功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的txt文件去重功能,涉及Python針對txt文本文件的讀寫、字符串遍歷、判斷相關(guān)操作技巧,需要的朋友可以參考下2018-07-07

