微吼云上線多路互動(dòng)直播服務(wù) 加速多場景互動(dòng)直播落地
1355
2025-04-02
目錄
開始使用點(diǎn)子
在您的系統(tǒng)上查找點(diǎn)子
將 pip 作為模塊運(yùn)行
在 Python 虛擬環(huán)境中使用 pip
發(fā)生錯(cuò)誤時(shí)重新安裝 pip
使用 pip 安裝軟件包
使用 Python 包索引 (PyPI)
使用自定義包索引
從 GitHub 存儲(chǔ)庫安裝包
以可編輯模式安裝包以簡化開發(fā)
使用需求文件
固定要求
微調(diào)要求
分離生產(chǎn)和開發(fā)依賴
生產(chǎn)冷凍要求
使用 pip 卸載軟件包
探索點(diǎn)子的替代方案
結(jié)論
Python的標(biāo)準(zhǔn)包管理器是pip.?它允許您安裝和管理不屬于Python 標(biāo)準(zhǔn)庫的包。如果您正在尋找 的介紹pip,那么您來對(duì)地方了!
在本教程中,您將學(xué)習(xí)如何:
pip在您的工作環(huán)境中設(shè)置
修復(fù)與使用相關(guān)的常見錯(cuò)誤pip
安裝和卸載軟件包pip
使用需求文件管理項(xiàng)目的依賴關(guān)系
開始使用pip
那么,具體是pip做什么的呢?pip是Python的包管理器。這意味著它是一個(gè)允許您安裝和管理不作為標(biāo)準(zhǔn)庫的一部分分發(fā)的庫和依賴項(xiàng)的工具。pip這個(gè)名字是由 Ian Bicking 在 2008 年提出的:
我已將 pyinstall 重命名為新名稱:pip。名稱 pip 是 [an] 首字母縮寫詞和聲明: pip 安裝包。(來源)
包管理非常重要,以至于 Python 的安裝程序pip從 3.4 和 2.7.9 版本開始就分別針對(duì) Python 3 和 Python 2 進(jìn)行了安裝。許多 Python 項(xiàng)目使用pip,這使其成為每個(gè) Pythonista 的必備工具。
如果您來自另一種編程語言,那么您可能對(duì)包管理器的概念很熟悉。JavaScript使用npm進(jìn)行包管理,Ruby使用gem,.NET 平臺(tái)使用NuGet。在 Python 中,pip已經(jīng)成為標(biāo)準(zhǔn)的包管理器。
pip在您的系統(tǒng)上查找
Python 3 安裝程序?yàn)槟趐ip系統(tǒng)上安裝 Python 時(shí)提供了安裝選項(xiàng)。事實(shí)上,pip使用 Python 安裝的選項(xiàng)是默認(rèn)勾選的,所以pip安裝 Python 后應(yīng)該就可以使用了。
注意:在某些 Linux (Unix) 系統(tǒng)(如 Ubuntu)上,有pip一個(gè)名為.?解釋器默認(rèn)不安裝它。python3-pipsudo apt install python3-pip
pip您可以通過在系統(tǒng)上查找pip3可執(zhí)行文件來驗(yàn)證它是否可用。在下面選擇您的操作系統(tǒng)并相應(yīng)地使用您的平臺(tái)特定命令:
視窗
Linux + macOS
C:\> where pip3
Windows 上的where命令會(huì)告訴你在哪里可以找到pip3.?如果 Windows 找不到名為 的可執(zhí)行文件pip3,那么您也可以嘗試在末尾pip不帶三個(gè) ( ) 的情況下查找。3
在 Windows 和 Unix 系統(tǒng)上,pip3可能會(huì)在多個(gè)位置找到。當(dāng)您安裝了多個(gè) Python 版本時(shí),可能會(huì)發(fā)生這種情況。如果您在系統(tǒng)上的任何位置都找不到pip,那么您可以考慮重新安裝 pip。
除了pip直接運(yùn)行系統(tǒng),您還可以將其作為 Python 模塊運(yùn)行。在下一節(jié)中,您將了解如何操作。
pip作為模塊運(yùn)行
當(dāng)您pip直接運(yùn)行您的系統(tǒng)時(shí),該命令本身不會(huì)顯示pip屬于哪個(gè) Python 版本。不幸的是,這意味著您可以pip在不注意的情況下將包安裝到舊 Python 版本的站點(diǎn)包中。為了防止這種情況發(fā)生,您可以pip作為 Python 模塊運(yùn)行:
$ python3 -m pip
請(qǐng)注意,您使用python3 -m運(yùn)行pip.?該-m開關(guān)告訴 Python 將模塊作為python3解釋器的可執(zhí)行文件運(yùn)行。這樣,您可以確保您的系統(tǒng)默認(rèn) Python 3 版本運(yùn)行該pip命令。如果您想了解更多關(guān)于這種跑步方式的信息pip,那么您可以閱讀 Brett Cannon 關(guān)于使用python3 -m pip.
有時(shí)您可能希望更加明確并將包限制為特定項(xiàng)目。在這種情況下,您應(yīng)該pip在虛擬環(huán)境中運(yùn)行。
pip在 Python 虛擬環(huán)境中使用
為避免將包直接安裝到系統(tǒng) Python 安裝中,您可以使用虛擬環(huán)境。虛擬環(huán)境為您的項(xiàng)目提供了一個(gè)獨(dú)立的 Python 解釋器。您在此環(huán)境中使用的任何包都將獨(dú)立于您的系統(tǒng)解釋器。這意味著您可以將項(xiàng)目的依賴項(xiàng)與其他項(xiàng)目和整個(gè)系統(tǒng)分開。
pip在虛擬環(huán)境中使用具有三個(gè)主要優(yōu)點(diǎn)。你可以:
確保您為手頭的項(xiàng)目使用正確的 Python 版本
確信您在運(yùn)行時(shí)引用了正確的pip實(shí)例pip或pip3
在不影響其他項(xiàng)目的情況下為您的項(xiàng)目使用特定的包版本
venvPython 3 具有用于創(chuàng)建虛擬環(huán)境的內(nèi)置模塊。此模塊可幫助您使用隔離的 Python 安裝創(chuàng)建虛擬環(huán)境。激活虛擬環(huán)境后,您可以將軟件包安裝到此環(huán)境中。您安裝到一個(gè)虛擬環(huán)境中的軟件包與系統(tǒng)上的所有其他環(huán)境隔離。
您可以按照以下步驟創(chuàng)建虛擬環(huán)境并驗(yàn)證您是否pip在新創(chuàng)建的環(huán)境中使用該模塊:
視窗
Linux + macOS
C:\> python -m venv venv C:\> venv\Scripts\activate.bat (venv) C:\> pip3 --version pip 21.2.3 from ...\lib\site-packages\pip (python 3.10) (venv) C:\> pip --version pip 21.2.3 from ...\lib\site-packages\pip (python 3.10)
venv在這里,您使用 Python 的內(nèi)置venv模塊創(chuàng)建一個(gè)虛擬環(huán)境。然后你用source命令激活它。()您的姓名周圍的括號(hào) ( )venv表示您已成功激活虛擬環(huán)境。
最后,檢查激活的虛擬環(huán)境中的pip3和可執(zhí)行文件的版本。pip兩者都指向同一個(gè)pip模塊,因此一旦您的虛擬環(huán)境被激活,您就可以使用pip或pip3。
pip發(fā)生錯(cuò)誤時(shí)重新安裝
運(yùn)行pip命令時(shí),在某些情況下可能會(huì)出現(xiàn)錯(cuò)誤。您的具體錯(cuò)誤消息將取決于您的操作系統(tǒng):
類似這樣的錯(cuò)誤消息表明安裝pip.
注意:pip當(dāng)命令不起作用時(shí),在開始任何故障排除之前,您可以嘗試使用末尾pip3帶有三個(gè)( )的命令。3
出現(xiàn)上面顯示的錯(cuò)誤可能會(huì)令人沮喪,因?yàn)閜ip對(duì)于安裝和管理外部軟件包至關(guān)重要。一些常見問題與pip此工具在您的系統(tǒng)上的安裝方式有關(guān)。
盡管不同系統(tǒng)的錯(cuò)誤消息不同,但它們都指向同一個(gè)問題:您的系統(tǒng)在變量pip中列出的位置中找不到。PATH在 Windows 上,PATH是系統(tǒng)變量的一部分。在 macOS 和 Linux 上,PATH是環(huán)境變量的一部分。您可以PATH使用以下命令檢查變量的內(nèi)容:
視窗
Linux + macOS
C:\> echo %PATH%
此命令的輸出將顯示磁盤上操作系統(tǒng)查找可執(zhí)行程序的位置(目錄)列表。根據(jù)您的系統(tǒng),位置可以用冒號(hào) (?:) 或分號(hào) (?;) 分隔。
默認(rèn)情況下,安裝 Python 或創(chuàng)建虛擬環(huán)境后,包含pip可執(zhí)行文件的目錄應(yīng)該存在。PATH然而,失蹤pip是一個(gè)普遍的問題。兩種受支持的方法可以幫助您pip再次安裝并將其添加到您的PATH:
ensurepip模塊_
get-pip.py腳本_
自 Python 3.4 以來,該ensurepip模塊一直是標(biāo)準(zhǔn)庫的一部分。添加它是為了為您提供一種直接的重新安裝方式,pip例如,如果您在安裝 Python 時(shí)跳過它或pip在某個(gè)時(shí)候卸載了它。在下面選擇您的操作系統(tǒng)并ensurepip相應(yīng)地運(yùn)行:
視窗
Linux + macOS
C:\> python -m ensurepip --upgrade
如果pip尚未安裝,則此命令會(huì)將其安裝在您當(dāng)前的 Python 環(huán)境中。如果您處于活動(dòng)的虛擬環(huán)境中,則該命令會(huì)安裝pip到該環(huán)境中。否則,它將pip全局安裝在您的系統(tǒng)上。該--upgrade選項(xiàng)確保pip版本與 中聲明的版本相同ensurepip。
注意:模塊ensurepip不上網(wǎng)。可以安裝的最新版本pip是ensurepip捆綁在您環(huán)境的 Python 安裝中的版本。例如,ensurepip使用 Python 3.10.0 運(yùn)行會(huì)安裝pip21.2.3。如果你想要一個(gè)更新的pip版本,那么你需要先運(yùn)行ensurepip.?之后,您可以pip手動(dòng)更新到其最新版本。
修復(fù)pip安裝的另一種方法是使用get-pip.py腳本。該get-pip.py文件包含pip編碼ZIP 文件的完整副本。您可以get-pip.py直接從PyPA 引導(dǎo)頁面下載。一旦你的機(jī)器上有腳本,你就可以像這樣運(yùn)行 Python 腳本:
視窗
Linux + macOS
C:\> python get-pip.py
此腳本將在您當(dāng)前的 Python 環(huán)境中安裝最新版本的pip、setuptools和。wheel如果您只想安裝pip,那么您可以將--no-setuptools和--no-wheel選項(xiàng)添加到您的命令中。
如果上述方法都不起作用,那么可能值得嘗試為您當(dāng)前平臺(tái)下載最新的Python 版本。您可以遵循Python 3 安裝和設(shè)置指南,以確保pip已正確安裝并且可以正常工作。
安裝軟件包pip
Python被認(rèn)為是一種包含電池的語言。這意味著Python 標(biāo)準(zhǔn)庫包含一組廣泛的包和模塊,以幫助開發(fā)人員完成他們的編碼項(xiàng)目。
同時(shí),Python 擁有一個(gè)活躍的社區(qū),該社區(qū)提供了更廣泛的包集,可以幫助您滿足開發(fā)需求。這些包發(fā)布到Python 包索引,也稱為PyPI(發(fā)音為Pie Pea Eye)。
PyPI 托管大量包,包括開發(fā)框架、工具和庫。其中許多包為 Python 標(biāo)準(zhǔn)庫的功能提供了友好的接口。
使用 Python 包索引 (PyPI)
PyPI 托管的眾多軟件包之一稱為requests.?該庫通過抽象HTTP請(qǐng)求的復(fù)雜性requests來幫助您與 Web 服務(wù)進(jìn)行交互。您可以在其官方文檔網(wǎng)站上了解所有相關(guān)信息。requests
當(dāng)你想requests在你的項(xiàng)目中使用這個(gè)包時(shí),你必須首先將它安裝到你的環(huán)境中。如果你不想在你的系統(tǒng) Python 站點(diǎn)包中安裝它,那么你可以先創(chuàng)建一個(gè)虛擬環(huán)境,如上圖所示。
創(chuàng)建并激活虛擬環(huán)境后,命令行提示符會(huì)在括號(hào)內(nèi)顯示虛擬環(huán)境的名稱。您從現(xiàn)在開始執(zhí)行的任何pip命令都將在您的虛擬環(huán)境中發(fā)生。
要安裝軟件包,請(qǐng)pip提供一個(gè)install命令。您可以運(yùn)行它來安裝requests軟件包:
視窗
Linux + macOS
(venv) C:\> python -m pip install requests
在此示例中,您pip使用install命令運(yùn)行,后跟要安裝的包的名稱。該pip命令在 PyPI 中查找包,解析其依賴項(xiàng),并在當(dāng)前 Python 環(huán)境中安裝所有內(nèi)容以確保其requests正常工作。
該pip install
也可以在一個(gè)命令中安裝多個(gè)包:
視窗
Linux + macOS
(venv) C:\> python -m pip install rptree codetiming
通過鏈接包rptree并codetiming在pip install命令中,您可以一次安裝兩個(gè)包。您可以在pip install命令中添加任意數(shù)量的包。在這種情況下,requirements.txt文件可以派上用場。在本教程的后面部分,您將學(xué)習(xí)如何使用一個(gè)requirements.txt文件一次安裝多個(gè)包。
注意:除非包的特定版本號(hào)與本教程相關(guān),否則您會(huì)注意到版本字符串采用x.y.z.?這是一種占位符格式,可以代表3.1.4、2.9或任何其他版本號(hào)。當(dāng)您繼續(xù)操作時(shí),終端中的輸出將顯示您的實(shí)際包版本號(hào)。
您可以使用該list命令顯示安裝在您的環(huán)境中的軟件包及其版本號(hào):
視窗
Linux + macOS
(venv) C:\> python -m pip list Package Version ------------------ --------- certifi x.y.z charset-normalizer x.y.z codetiming x.y.z idna x.y.z pip x.y.z requests x.y.z rptree x.y.z setuptools x.y.z urllib3 x.y.z
該pip list命令呈現(xiàn)一個(gè)表格,顯示當(dāng)前環(huán)境中所有已安裝的包。上面的輸出使用x.y.z占位符格式顯示包的版本。在您的環(huán)境中運(yùn)行該pip list命令時(shí),pip會(huì)顯示您為每個(gè)包安裝的特定版本號(hào)。
要獲取有關(guān)特定包的更多信息,您可以使用以下show命令查看包的元數(shù)據(jù)pip:
視窗
Linux + macOS
(venv) C:\> python -m pip show requests Name: requests Version: x.y.z Summary: Python HTTP for Humans. ... Requires: certifi, idna, charset-normalizer, urllib3 Required-by:
您系統(tǒng)上此命令的輸出將列出包的元數(shù)據(jù)。該Requires行列出了包,例如certifi、idna、charset-normalizer和urllib3。這些是安裝的,因?yàn)閞equests依賴于它們才能正常工作。
現(xiàn)在您已經(jīng)安裝requests了它及其依賴項(xiàng),您可以像導(dǎo)入Python 代碼中的任何其他常規(guī)包一樣導(dǎo)入它。啟動(dòng)交互式 Python 解釋器并導(dǎo)入requests包:
>>>
>>> import requests >>> requests.__version__ "x.y.z"
啟動(dòng)交互式 Python 解釋器后,您導(dǎo)入了requests模塊。通過調(diào)用requests.__version__,您確認(rèn)您正在requests虛擬環(huán)境中使用該模塊。
使用自定義包索引
默認(rèn)情況下,pip使用 PyPI 查找包。但pip也為您提供了定義自定義包索引的選項(xiàng)。
pip當(dāng) PyPI 域在您的網(wǎng)絡(luò)上被阻止或您想要使用不公開可用的包時(shí),使用自定義索引會(huì)很有幫助。有時(shí)系統(tǒng)管理員也會(huì)創(chuàng)建自己的內(nèi)部包索引,以更好地控制pip公司網(wǎng)絡(luò)上的用戶可以使用哪些包版本。
自定義包索引必須符合PEP 503 – Simple Repository API?to work with?pip.?您可以通過訪問PyPI 簡單索引來了解此類API(應(yīng)用程序編程接口)的外觀——但請(qǐng)注意,這是一個(gè)包含許多難以解析的內(nèi)容的大頁面。任何遵循相同 API 的自定義索引都可以作為該選項(xiàng)的目標(biāo)。除了鍵入,您還可以使用速記。--index-url--index-url-i
例如,要從TestPyPIrptree包索引安裝該工具,您可以運(yùn)行以下命令:
視窗
Linux + macOS
使用自定義包索引
默認(rèn)情況下,pip使用 PyPI 查找包。但pip也為您提供了定義自定義包索引的選項(xiàng)。
pip當(dāng) PyPI 域在您的網(wǎng)絡(luò)上被阻止或您想要使用不公開可用的包時(shí),使用自定義索引會(huì)很有幫助。有時(shí)系統(tǒng)管理員也會(huì)創(chuàng)建自己的內(nèi)部包索引,以更好地控制pip公司網(wǎng)絡(luò)上的用戶可以使用哪些包版本。
自定義包索引必須符合PEP 503 – Simple Repository API?to work with?pip.?您可以通過訪問PyPI 簡單索引來了解此類API(應(yīng)用程序編程接口)的外觀——但請(qǐng)注意,這是一個(gè)包含許多難以解析的內(nèi)容的大頁面。任何遵循相同 API 的自定義索引都可以作為該選項(xiàng)的目標(biāo)。除了鍵入,您還可以使用速記。--index-url--index-url-i
例如,要從TestPyPIrptree包索引安裝該工具,您可以運(yùn)行以下命令:
視窗
Linux + macOS
(venv) C:\> python -m pip install -i https://test.pypi.org/simple/ rptree
使用該-i選項(xiàng),您告訴pip查看不同的包索引而不是默認(rèn)的 PyPI。在這里,您是rptree從 TestPyPI 而不是從 PyPI 安裝的。您可以使用 TestPyPI 來微調(diào)Python 包的發(fā)布過程,而不會(huì)弄亂 PyPI 上的生產(chǎn)包索引。
如果您需要永久使用替代索引,則可以在配置文件index-url中設(shè)置該選項(xiàng)。該文件名為,您可以通過運(yùn)行以下命令找到它的位置:pip?pip.conf
視窗
Linux + macOS
(venv) C:\> python -m pip config list -vv
使用該pip config list命令,您可以列出活動(dòng)配置。此命令僅在您設(shè)置了自定義配置時(shí)才會(huì)輸出。否則,輸出為空。那時(shí),additive--verbose或-vv, 選項(xiàng)可能會(huì)有所幫助。添加 時(shí)-vv,pip會(huì)顯示它在哪里查找不同的配置級(jí)別。
如果要添加pip.conf文件,則可以選擇pip config list -vv列出的位置之一。具有自定義包索引的pip.conf文件如下所示:
# pip.conf [global] index-url = https://test.pypi.org/simple/
當(dāng)你有這樣的pip.conf文件時(shí),pip將使用定義index-url的來查找包。使用此配置,您無需--index-url在命令中使用選項(xiàng)pip install來指定您只需要可以在TestPyPI的簡單 API中找到的包。
從 GitHub 存儲(chǔ)庫安裝包
您不僅限于托管在 PyPI 或其他包索引上的包。pip還提供了從GitHub 存儲(chǔ)庫安裝包的選項(xiàng)。但即使包托管在 PyPI 上,例如Real Python 目錄樹生成器,您也可以選擇從其Git 存儲(chǔ)庫安裝它:
視窗
Linux + macOS
(venv) C:\> python -m pip install git+https://github.com/realpython/rptree
使用該git+https方案,您可以指向包含可安裝包的 Git 存儲(chǔ)庫。您可以通過運(yùn)行交互式 Python 解釋器并導(dǎo)入來驗(yàn)證您是否正確安裝了包rptree:
>>>
>>> import rptree >>> rptree.__version__ "x.y.z"
啟動(dòng)交互式 Python 解釋器后,導(dǎo)入rptree模塊。通過調(diào)用rptree.__version__,您可以驗(yàn)證您正在使用rptree基于虛擬環(huán)境的模塊。
注意:如果您使用的是 Git 以外的版本控制系統(tǒng) (VCS),pip您是否了解過。要了解如何使用pipMercurial、Subversion 或 Bazaar,請(qǐng)查看文檔的VCS支持章節(jié)pip。
如果包不是托管在 PyPI 上但具有遠(yuǎn)程 Git 存儲(chǔ)庫,則從 Git 存儲(chǔ)庫安裝包會(huì)很有幫助。您指向的遠(yuǎn)程存儲(chǔ)庫pip甚至可以托管在公司 Intranet 上的內(nèi)部 Git 服務(wù)器上。當(dāng)您在防火墻后面或?qū)?Python 項(xiàng)目有其他限制時(shí),這可能很有用。
以可編輯模式安裝包以簡化開發(fā)
在處理自己的包時(shí),以可編輯模式安裝它是有意義的。通過這樣做,您可以像在任何其他包中一樣使用命令行,同時(shí)處理源代碼。一個(gè)典型的工作流程是首先克隆存儲(chǔ)庫,然后pip將其作為可編輯包安裝到您的環(huán)境中:
視窗
Linux + macOS
1C:\> git clone https://github.com/realpython/rptree 2C:\> cd rptree 3C:\rptree> python3 -m venv venv 4C:\rptree> venv\Scripts\activate.bat 5(venv) C:\rptree> python -m pip install -e .
使用上面的命令,您將rptree包安裝為可編輯模塊。以下是您剛剛執(zhí)行的操作的分步細(xì)分:
第 1 行克隆了rptree包的 Git 存儲(chǔ)庫。
第 2行將工作目錄更改為rptree/.
第 3 行和第 4 行創(chuàng)建并激活了一個(gè)虛擬環(huán)境。
第 5行將當(dāng)前目錄的內(nèi)容安裝為可編輯的包。
-e選項(xiàng)是選項(xiàng)的簡寫--editable。當(dāng)您使用帶有 的-e選項(xiàng)時(shí)pip install,您告訴pip您要以可編輯模式安裝包。不使用包名,而是使用點(diǎn) (?.) 來指向pip當(dāng)前目錄。
如果您沒有使用該-e標(biāo)志,pip則通常會(huì)將軟件包安裝到您的環(huán)境site-packages/文件夾中。當(dāng)您以可編輯模式安裝包時(shí),您將在站點(diǎn)包中創(chuàng)建指向本地項(xiàng)目路徑的鏈接:
~/rptree/venv/lib/python3.10/site-packages/rptree.egg-link
使用pip install帶有標(biāo)志的命令-e只是pip install提供的眾多選項(xiàng)之一。您可以查看文檔中的pip install示例。pip在那里,您將學(xué)習(xí)如何安裝特定版本的包或指向pip不是 PyPI 的不同索引。
在下一部分中,您將了解需求文件如何幫助您的pip工作流程。
使用需求文件
該pip install命令始終安裝包的最新發(fā)布版本,但有時(shí)您的代碼需要特定的包版本才能正常工作。
您希望創(chuàng)建用于開發(fā)和測試應(yīng)用程序的依賴項(xiàng)和版本的規(guī)范,以便在生產(chǎn)中使用該應(yīng)用程序時(shí)不會(huì)感到意外。
固定要求
當(dāng)您與其他開發(fā)人員共享您的 Python 項(xiàng)目時(shí),您可能希望他們使用與您正在使用的相同版本的外部包。可能某個(gè)包的特定版本包含您依賴的新功能,或者您正在使用的包的版本與以前的版本不兼容。
這些外部依賴項(xiàng)也稱為需求。您經(jīng)常會(huì)發(fā)現(xiàn) Python 項(xiàng)目將其需求固定在一個(gè)名為requirements.txt或類似的文件中。需求文件格式允許您精確指定應(yīng)該安裝哪些包和版本。
運(yùn)行pip help顯示有一個(gè)freeze命令以需求格式輸出已安裝的包。您可以使用此命令,將輸出重定向到文件以生成需求文件:
視窗
Linux + macOS
(venv) C:\> python -m pip freeze > requirements.txt
requirements.txt此命令在您的工作目錄中創(chuàng)建一個(gè)文件,其內(nèi)容如下:
certifi==x.y.z charset-normalizer==x.y.z idna==x.y.z requests==x.y.z urllib3==x.y.z
請(qǐng)記住,x.y.z上面顯示的是包版本的占位符格式。您的requirements.txt文件將包含真實(shí)的版本號(hào)。
該freeze命令將當(dāng)前安裝的包的名稱和版本轉(zhuǎn)儲(chǔ)到標(biāo)準(zhǔn)輸出。您可以將輸出重定向到一個(gè)文件,您以后可以使用該文件將您的確切要求安裝到另一個(gè)系統(tǒng)中。您可以隨意命名需求文件。然而,一個(gè)被廣泛采用的約定是命名它requirements.txt。
當(dāng)您想在另一個(gè)系統(tǒng)中復(fù)制環(huán)境時(shí),您可以運(yùn)行pip install,使用-r開關(guān)指定需求文件:
視窗
Linux + macOS
(venv) C:\> python -m pip install -r requirements.txt
在上面的命令中,您告訴pip將列出的軟件包安裝requirements.txt到當(dāng)前環(huán)境中。包版本將匹配requirements.txt文件包含的版本約束。您可以運(yùn)行pip list以顯示剛剛安裝的軟件包及其版本號(hào):
視窗
Linux + macOS
(venv) C:\> python -m pip list Package Version ------------------ --------- certifi x.y.z charset-normalizer x.y.z idna x.y.z pip x.y.z requests x.y.z setuptools x.y.z urllib3 x.y.z
現(xiàn)在您已準(zhǔn)備好分享您的項(xiàng)目!您可以提交requirements.txt到 Git 等版本控制系統(tǒng),并使用它在其他機(jī)器上復(fù)制相同的環(huán)境。但是等等,如果為這些軟件包發(fā)布了新的更新會(huì)發(fā)生什么?
微調(diào)要求
對(duì)包的版本和依賴項(xiàng)進(jìn)行硬編碼的問題在于,包會(huì)經(jīng)常使用錯(cuò)誤和安全修復(fù)進(jìn)行更新。您可能希望在這些更新發(fā)布后立即利用它們。
需求文件格式允許您使用比較運(yùn)算符指定依賴版本,這使您可以靈活地確保更新包,同時(shí)仍定義包的基本版本。
requirements.txt在您喜歡的編輯器中打開并將相等運(yùn)算符 (?==) 轉(zhuǎn)換為大于或等于運(yùn)算符 (?>=),如下例所示:
# requirements.txt certifi>=x.y.z charset-normalizer>=x.y.z idna>=x.y.z requests>=x.y.z urllib3>=x.y.z
微調(diào)要求
對(duì)包的版本和依賴項(xiàng)進(jìn)行硬編碼的問題在于,包會(huì)經(jīng)常使用錯(cuò)誤和安全修復(fù)進(jìn)行更新。您可能希望在這些更新發(fā)布后立即利用它們。
需求文件格式允許您使用比較運(yùn)算符指定依賴版本,這使您可以靈活地確保更新包,同時(shí)仍定義包的基本版本。
requirements.txt在您喜歡的編輯器中打開并將相等運(yùn)算符 (?==) 轉(zhuǎn)換為大于或等于運(yùn)算符 (?>=),如下例所示:
# requirements.txt certifi>=x.y.z charset-normalizer>=x.y.z idna>=x.y.z requests>=x.y.z urllib3>=x.y.z
您可以將比較運(yùn)算符更改>=為告訴pip安裝已發(fā)布的確切或更高版本。當(dāng)您使用該requirements.txt文件設(shè)置新環(huán)境時(shí),pip查找滿足要求的最新版本并安裝它。
接下來,您可以通過使用開關(guān)或簡寫運(yùn)行install命令來升級(jí)需求文件中的軟件包:--upgrade-U
視窗
Linux + macOS
(venv) C:\> python -m pip install -U -r requirements.txt
如果列出的軟件包有新版本可用,則該軟件包將被升級(jí)。
在理想情況下,新版本的包將向后兼容并且永遠(yuǎn)不會(huì)引入新的錯(cuò)誤。不幸的是,新版本可能會(huì)引入會(huì)破壞您的應(yīng)用程序的更改。為了微調(diào)您的需求,需求文件語法支持額外的版本說明符。
想象一下,發(fā)布了一個(gè)新版本,3.0但requests引入了一個(gè)不兼容的更改,從而破壞了您的應(yīng)用程序。您可以修改需求文件以防止3.0或更高版本被安裝:
# requirements.txt certifi==x.y.z charset-normalizer==x.y.z idna==x.y.z requests>=x.y.z, <3.0 urllib3==x.y.z
更改包的版本說明符可確保不會(huì)安裝requests任何大于或等于的版本。3.0該pip文檔提供了有關(guān)需求文件格式的大量信息,您可以查閱它以了解更多信息。
分離生產(chǎn)和開發(fā)依賴
并非您在應(yīng)用程序開發(fā)過程中安裝的所有軟件包都是生產(chǎn)依賴項(xiàng)。例如,您可能想要測試您的應(yīng)用程序,因此您需要一個(gè)測試框架。一個(gè)流行的測試框架是pytest.?您想將它安裝在您的開發(fā)環(huán)境中,但您不希望它在您的生產(chǎn)環(huán)境中,因?yàn)樗皇巧a(chǎn)依賴項(xiàng)。
您創(chuàng)建第二個(gè)需求文件 ,requirements_dev.txt以列出用于設(shè)置開發(fā)環(huán)境的其他工具:
# requirements_dev.txt pytest>=x.y.z
擁有兩個(gè)需求文件將要求您使用pip它們來安裝它們,requirements.txt并且requirements_dev.txt.?幸運(yùn)的是,pip允許您在需求文件中指定其他參數(shù),因此您可以修改requirements_dev.txt以安裝生產(chǎn)requirements.txt文件中的需求:
# requirements_dev.txt -r requirements.txt pytest>=x.y.z
請(qǐng)注意,您使用相同的-r開關(guān)來安裝生產(chǎn)requirements.txt文件。現(xiàn)在,在您的開發(fā)環(huán)境中,您只需運(yùn)行這個(gè)命令即可安裝所有要求:
視窗
Linux + macOS
(venv) C:\> python -m pip install -r requirements_dev.txt
因?yàn)閞equirements_dev.txt包含該-r requirements.txt行,所以您不僅要安裝,還要pytest安裝requirements.txt.?在生產(chǎn)環(huán)境中,僅安裝生產(chǎn)要求就足夠了:
視窗
Linux + macOS
(venv) C:\> python -m pip install -r requirements.txt
使用此命令,您可以安裝requirements.txt.?與您的開發(fā)環(huán)境相比,您的生產(chǎn)環(huán)境不會(huì)pytest安裝。
生產(chǎn)冷凍要求
您創(chuàng)建了生產(chǎn)和開發(fā)需求文件并將它們添加到源代碼控制中。這些文件使用靈活的版本說明符來確保您利用依賴項(xiàng)發(fā)布的錯(cuò)誤修復(fù)。您還測試了您的應(yīng)用程序,現(xiàn)在可以將其部署到生產(chǎn)環(huán)境中。
您知道所有測試都通過并且應(yīng)用程序與您在開發(fā)過程中使用的依賴項(xiàng)一起工作,因此您可能希望確保將相同版本的依賴項(xiàng)部署到生產(chǎn)環(huán)境。
當(dāng)前版本說明符不保證相同的版本將部署到生產(chǎn)中,因此您希望在發(fā)布項(xiàng)目之前凍結(jié)生產(chǎn)需求。
根據(jù)當(dāng)前需求完成開發(fā)后,創(chuàng)建當(dāng)前項(xiàng)目新版本的工作流程如下所示:
通過這樣的工作流程,該requirements_lock.txt文件將包含準(zhǔn)確的版本說明符,并可用于復(fù)制您的環(huán)境。您已確保當(dāng)您的用戶將列出的軟件包安裝requirements_lock.txt到他們自己的環(huán)境中時(shí),他們將使用您希望他們使用的版本。
凍結(jié)您的需求是確保您的 Python 項(xiàng)目在用戶環(huán)境中以與在您的環(huán)境中相同的方式工作的重要步驟。
卸載軟件包pip
有時(shí),您必須卸載一個(gè)軟件包。要么你找到了一個(gè)更好的庫來替換它,要么它是你不需要的東西。卸載軟件包可能有點(diǎn)棘手。
請(qǐng)注意,當(dāng)您安裝時(shí)requests,您還pip必須安裝其他依賴項(xiàng)。您安裝的包越多,多個(gè)包依賴相同依賴項(xiàng)的機(jī)會(huì)就越大。這就是show命令 inpip派上用場的地方。
在卸載軟件包之前,請(qǐng)確保運(yùn)行該show軟件包的命令:
視窗
Linux + macOS
(venv) C:\> python -m pip show requests Name: requests Version: 2.26.0 Summary: Python HTTP for Humans. Home-page: https://requests.readthedocs.io Author: Kenneth Reitz Author-email: me@kennethreitz.org License: Apache 2.0 Location: .../python3.9/site-packages Requires: certifi, idna, charset-normalizer, urllib3 Required-by:
注意最后兩個(gè)字段Requires和Required-by。該show命令告訴您requests需要certifi、idna、charset-normalizer和urllib3。您可能也想卸載這些。請(qǐng)注意,requests任何其他軟件包都不需要。所以卸載它是安全的。
您應(yīng)該show針對(duì)所有依賴項(xiàng)運(yùn)行該命令,requests以確保沒有其他庫也依賴于它們。一旦了解了要卸載的軟件包的依賴順序,就可以使用以下uninstall命令刪除它們:
視窗
Linux + macOS
(venv) C:\> python -m pip uninstall certifi
該uninstall命令向您顯示將被刪除的文件并要求確認(rèn)。如果您確定要?jiǎng)h除包,因?yàn)槟呀?jīng)檢查了它的依賴關(guān)系并且知道沒有其他東西在使用它,那么您可以傳遞一個(gè)-y開關(guān)來禁止文件列表和確認(rèn)對(duì)話框:
視窗
Linux + macOS
(venv) C:\> python -m pip uninstall urllib3 -y
在這里你卸載urllib3。使用該-y開關(guān),您可以抑制詢問您是否要卸載此軟件包的確認(rèn)對(duì)話框。
在一次調(diào)用中,您可以指定要卸載的所有包:
視窗
Linux + macOS
(venv) C:\> python -m pip uninstall -y charset-normalizer idna requests
您可以將多個(gè)包傳遞給pip uninstall命令。如果您沒有添加任何額外的開關(guān),那么您需要確認(rèn)卸載每個(gè)包。通過傳遞-y開關(guān),您可以在沒有任何確認(rèn)對(duì)話框的情況下將它們?nèi)啃遁d。
您還可以通過提供-r
視窗
Linux + macOS
(venv) C:\> python -m pip uninstall -r requirements.txt -y
請(qǐng)記住始終檢查要卸載的軟件包的依賴關(guān)系。您可能想卸載所有依賴項(xiàng),但卸載其他人使用的包會(huì)破壞您的工作環(huán)境。因此,您的項(xiàng)目可能不再正常工作。
如果您在虛擬環(huán)境中工作,只需創(chuàng)建一個(gè)新的虛擬環(huán)境就可以減少工作量。然后您可以安裝您需要的軟件包,而不是嘗試卸載您不需要的軟件包。但是,pip uninstall當(dāng)您需要從系統(tǒng) Python 安裝中卸載包時(shí),它會(huì)非常有用。pip uninstall如果您不小心在系統(tǒng)范圍內(nèi)安裝了軟件包,使用是一種整理系統(tǒng)的好方法。
探索替代方案pip
Python 社區(qū)提供了出色的工具和庫供您在pip.?pip這些包括嘗試簡化和改進(jìn)包管理的替代方案。
以下是可用于 Python 的其他一些包管理工具:
僅pip捆綁在標(biāo)準(zhǔn) Python 安裝中。如果您想使用上面列出的任何替代方案,則必須遵循其文檔中的安裝指南。有這么多選擇,您一定會(huì)找到適合您的編程之旅的工具!
結(jié)論
許多 Python 項(xiàng)目使用pip包管理器來管理它們的依賴項(xiàng)。它包含在 Python 安裝程序中,是 Python 中依賴項(xiàng)管理的重要工具。
在本教程中,您學(xué)習(xí)了如何:
pip在您的工作環(huán)境中設(shè)置和運(yùn)行
修復(fù)與使用相關(guān)的常見錯(cuò)誤pip
安裝和卸載軟件包pip
定義項(xiàng)目和應(yīng)用程序的要求
在需求文件中固定依賴項(xiàng)
此外,您還了解了使依賴項(xiàng)保持最新的重要性以及pip可以幫助您管理這些依賴項(xiàng)的替代方法。
通過仔細(xì)查看pip,您已經(jīng)探索了 Python 開發(fā)工作流程中的一個(gè)重要工具。使用,您可以安裝和管理在PyPIpip上找到的任何其他包。您可以使用來自其他開發(fā)人員的外部包作為需求,并專注于使您的項(xiàng)目獨(dú)一無二的代碼。
Python 虛擬化
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。