想了解pip的工作原理餐屎,無奈沒找想要的內(nèi)容摘刑,所以打算翻譯一下pip官方文檔的User Guide部分。
我使用的mac OSX系統(tǒng)骏融,一些linux或者mac os的上的操作,我會用本地操作代替帮匾。
User Guide
目錄如下:
Running pip
pip是一個命令行程序。當你安裝了pip過后,pip就會被添加到你的系統(tǒng)中坐桩,就可以在命令提示符后使用pip了。
如果你不能直接運行pip命令(很可能是因為pip沒有被安裝在系統(tǒng)的環(huán)境變量PATH中)封锉,然后你可以通過python解釋器運行pip命令绵跷。
在Windows系統(tǒng)中,可以使用py啟動器
盡管pip可以從你的python安裝中作為一個模塊導(dǎo)入(通過import pip)成福,但是不支持這樣使用pip碾局,了解更多關(guān)于程序中使用pip請看Using pip from your program。
Install Packages
pip支持從PyPI奴艾、版本控制净当、本地項目或者分發(fā)式文件(distribution files)中安裝。
最常見的場景就是蕴潦,使用Requirement Specifiers從PyPI中安裝像啼。
$ pip install SomePackage # latest version
$ pip install SomePackage==1.0.4 # specific version
$ pip install 'SomePackage>=1.0.4' # minimum version
更多信息和案例,請參考pip install潭苞。
使用代理服務(wù)器(Using a Proxy Server)
當從PyPI安裝包時忽冻,pip需要訪問網(wǎng)絡(luò),在很多公司的網(wǎng)絡(luò)環(huán)境中需要一個HTTP代理服務(wù)器萄传。
pip可以使用多種配置方式通過一個代理服務(wù)器連接網(wǎng)路:
- 命令行使用--proxy選項甚颂,用來指定一個代理服務(wù),[user:passwd@]proxy.server:port
- 在配置文件( Config file
)中使用proxy秀菱。 - 通過設(shè)置標準的環(huán)境變量http_proxy, https_proxy和no_proxy振诬。
Requirement Files
"Requirement Files"是包含了要被安裝的包的一個列表,使用pip安裝就像這樣:
文件內(nèi)容的格式細節(jié)可以參考:Requirements File Format
理論上來講衍菱,一個"Requirement File"就是一個使用pip安裝參數(shù)的列表文件赶么。注意,你不應(yīng)該以任何特定順序依賴pip安裝的文件中的項目脊串。
實際上辫呻,"Requirement Files"有4中常用方式:
-
"Requirement Files"用來保存pip freeze命令的結(jié)果,pip freeze的目的是用來實現(xiàn)重復(fù)安裝琼锋。這樣一來放闺,你的"Requirement File"包含了一些列固定版本的,由pip freeze運行產(chǎn)生的結(jié)果的依賴包列表缕坎。
image.png "Requirement Files"用來強制解決包的依賴關(guān)系怖侦。想現(xiàn)在這樣,pip并沒有一個正確的依賴方案,只不過是使用第一個規(guī)格參數(shù)(比如aiohttp==3.4.4)來為項目尋找包匾寝。例如搬葬,如果pkg1需要pkg3>=1.0并且pkg2需要pkg3>=1.0,<=2.0艳悔,如果只有pkg1被解析急凰,那么將只會用pkg3>=1.0,但是很容易安裝一個和pkg依賴相沖突的版本猜年。為了解決這個問題抡锈,你可以直接把 pkg3>=1.0,<=2.0 放入你的requirement file中,就像這樣:
pkg1
pkg2
pkg3>=1.0,<=2.0
- Requirements files強制pip安裝按一個對所有子依賴項可用的版本码倦。例如企孩,為了支持ProjectA,在你的Requirements files需要ProjectB袁稽,但是最新的班本有bug勿璃,你可以強制pip使用更早的版本。
ProjectA
ProjectB<1.3
-
Requirements files用來覆蓋與版本控制中的本地補丁程序的依賴關(guān)系推汽。例如补疑,假定有一個依賴,PyPI中的一些依賴有bug歹撒,而你又不能等待上游更新莲组。你可以復(fù)制源文件,然后修復(fù)暖夭,在VCS中標記一個tag锹杈。你可以在需求文件中使用類似的行引用它。
image.png
如果SomeDependency以前是需求文件中的頂級要求迈着,則將該行替換為新行竭望。 如果SomeDependency是子依賴項,則添加新行裕菠。
重要的是要明確pip使用install_requires元數(shù)據(jù)確定包依賴關(guān)系咬清,而不是通過發(fā)現(xiàn)項目中嵌入的requirements.txt文件。
參考: