什么是pip和virtualenv?Python新手必讀

老白最近給朋友們講解NLP,順帶做了點Python的介紹。雖然大家都或多或少的使用過Python(大部分都不是Python 工程師),但是老白還是驚訝的發現有不少同事并不知道virtualenv,每次搞Python都是隨便玩玩然后就把系統搞得亂七八糟的了。因此老白給大伙普及了下virtualenv這個神器,順帶也寫下這篇文章。這篇的內容主要包含了pip,virtualenv和requirements.txt文件,完全基礎,僅供Python新手們學習,有Python經驗的同學可以繞道而行^_^。

什么是pip?

pip是一個從Python Package Index(PyPI)安裝Python軟件包的管理器。這里的PyPI就是一個Python第三方開源倉庫。

如果大家有其他語言的背景,那么可能會對包管理器的概念比較熟悉。JavaScript 使用 npm 管理軟件包,Ruby 使用 gem,Java使用Maven,以及 .NET 使用 NuGet。Python 中,則是 pip 作為標準包管理器。

Python其實最開始還有一個比較原始基礎的包管理器easy_install。但是其漸漸被淘汰了,老白也不建議大家去花過多時間了解。也正是因為pip越來越重要,自從Python3.4和Python2.7.9之后的版本,pip都是默認包含在Python的安裝包中的。如果使用的是之前的版本,可以通過easy_install pip來進行安裝pip(是不是略顯諷刺,easy_install安裝一個工具來替代自己)。

easy_install

pip

有了pip之后,我們就可以通過類似以下的命令來安裝軟件包了

#千萬先別運行

pip

installdjango

這里,我們將Django進行了全局安裝(全局安裝意味著安裝完之后將對所有的應用可見)。但是在大部分情況下,我們并不希望進行全局安裝??梢栽谙旅娴睦又锌吹?,并不是每個應用都會使用同一個版本的軟件包,全局安裝將會使得軟件的運行環境混亂不堪。

virtualenv解決了什么問題

virtualenv解決了一個非常具體的問題:其允許了多個Python項目在同一臺電腦上同時開發,并且使用不同的運行環境。

為了更好的說明這個問題,我們可以假設virtualenv這個功能并不存在。當我們需要寫一個具有HTTP請求的Python程序時,我們需要使用到Requests這個包,我們可以通過上面提到的pip命令進行安裝Requests。

$

pip install requests

Collecting

requests

Using

cached requests-2.24.0-py2.py3-none-any.whl (61 kB)

Collecting

urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1

Using

cached urllib3-1.25.9-py2.py3-none-any.whl (126 kB)

Collecting

idna<3,>=2.5

Using

cached idna-2.10-py2.py3-none-any.whl (58 kB)

Collecting

chardet<4,>=3.0.2

Using

cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)

Collecting

certifi>=2017.4.17

Using

cached certifi-2020.6.20-py2.py3-none-any.whl (156 kB)

Installing

collected packages: urllib3, idna, chardet, certifi, requests

Successfully

installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.9

但是這個Requests會被安裝到哪里呢?

如果是使用linux的話,默認會被安裝到/usr/local/lib/<python版本>/site-packages。

Windows則是會安裝到c:\users\<用戶名>\appdata\local\programs\python\<python版本>\lib\site-packages。

Mac則會安裝到/Library/Python/<python版本>/site-packages。

Mac用戶和Linux用戶在這個過程中還有可能遇到權限問題。

安裝好了之后,我們可以通過import requests來使用requests。整個軟件的運行也不會有任何問題,客戶很滿意,賺錢大大的有。

于是用戶又給我們了一個新的項目。在做新的項目時,我們發現我們又得使用requests了,只不過這次需要使用的是一個新功能,只有在最新版本的requests中才有這個功能。因此我們決定對requests進行升級.

pip

install

--upgraderequests

一切似乎都很正常,但是其實我們已經給未來埋下了隱患。

當我們運行第一個軟件的時候,我們發現完全運行不起來了,到底怎么回事?因為requests的某些API在新版本中被更改了,雖然可能只是一個很小的改動,直接導致了我們原來的程序無法啟動了。

此時,我們當然可以直接修改我們之前的應用使用最新的requests API來解決這個問題。但是這會相當的耗時間可能需要將很多東西都進行替換并且完成回歸測試。從項目管理的角度來說,除非是出現了一些比較嚴重的bug,不然不應該占用新項目的時間來解決老項目的問題,因為這樣會影響新項目的進度。而這是很常見的一個場景,更多的Python開發工作者可能不只有兩個項目。如果總是把軟件包都升級到最新版本,對于開發者而言,無異于噩夢。

virtualenv如何幫助開發者

virtualenv通過給每一個應用創建一個完全隔離的虛擬環境來解決這個問題。一個環境其實只是一個簡單的文件夾包含了需要運行Python應用的所有依賴。其中也包含了Python運行程序本身,一個完整的Python標準庫拷貝,完整的pip,以及site-packages目錄。當使用pip進行安裝軟件的時候,使用的是這個virtualenv創建的pip,并且會將軟件包安裝到這個virtualenv創建的site-packages中。

如何安裝virtualenv

如果已經有了pip,最簡單的方式就是通過pip來安裝virtualenv。pip和virtualenv也幾乎是唯二的兩個需要全局安裝的工具了,一旦有了這兩個,就可以通過virtualenv來創建虛擬環境并且在虛擬環境中工作。

pip

install virtualenv

如何創建虛擬環境

virtualenv是創建虛擬環境所需要的唯一工具,而且創建過程也很簡單。只需要切換到項目根目錄,然后通過virtualenv創建一個新的虛擬環境:

cd

/path/to/myprojectvirtualenvvenv

這里venv是虛擬環境文件夾的名字。這個文件夾會在項目文件夾中。例如,如果我的項目在~/sources/myproject,那么venv的地址就是~/sources/myproject/venv。但是其實我們可以將其放在任何文件夾中。

注意:如果使用類似于git之類的版本控制,記得將venv添加到.gitignore中。

如何使用venv

如果我們查看venv文件夾的話,我們會看到如下一些文件夾:

venv

這里主要的是Scripts文件夾,里面放置了完整的python運行命令以及pip。我們可以嘗試使用Scripts中的pip進行安裝requests。

使用venv中的pip安裝requests

一切正常,而且requests被安裝到了venv/Lib/site-packages中了。

我們也可以使用venv/Scripts/Python命令,一切使用正常。

但是。。用起來真的好麻煩

別急,virtualenv的開發者也想到了這點,因此他們提供了一個工具activate來減輕virtualenv使用者的負擔,這樣就不需要每次都輸入完整的路徑了。

在linux下,

$

source

venv/bin/activate

在Windows中,

venv\Scripts\activate

使用了activate之后,我們再使用pip進行安裝,默認就安裝到venv中了。當然了,這個activate只在當前的terminal中起作用,如果新開一個terminal的話我們需要重新運行一次activate。如果希望在當前的terminal中切換到其他venv中,我們還可以調用deactivate來取消當前虛擬環境的使用。

Requirements.txt

pip和virtualenv就是一對好伙伴,特別是使用requirements.txt的時候。我們在本地創建好了我們的項目以及一系列依賴之后,我們會把這些代碼包括依賴推送到代碼倉庫,或作為備份或與別人分享。很有包的體積都比較大,而且包并沒有什么特殊性,因為我們肯定不希望我們直接將項目依賴的包推到代碼倉庫上。這時候我們就可以使用requirements.txt了。通過pip的freeze命令可以格式化的輸出已經安裝的軟件包,通過重定向可以將輸出直接寫入requirements.txt文件。

生成requirements.txt文件

有了requirements.txt文件之后,自然也可以通過requirements.txt文件來繼續安裝。使用的就是pip install -r 的命令。下面截圖顯示的例子就是在一個新的虛擬環境venv2中安裝requirements.txt中的軟件包。

安裝requirements.txt定義的軟件包

來個小結

pip能夠幫助我們安裝軟件包,pip是比easy_install優秀的一個工具,建議使用pip

virtualenv能夠幫助我們創建一個隔離的運行環境

為了不用輸入完整路徑,使用activate來激活虛擬環境

使用requirements.txt來和他人共享項目依賴信息

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容文字的真實性、完整性和原創性本站不作任何保證或承諾,請讀者僅作參考,并自行核實相關內容。

http://image95.pinlue.com/image/17.jpg
分享
評論
首頁
(-^O^-)MG金字塔的财富爆分打法 重庆幸运农场应用 最新麻将赌博技巧教学_点进进入 时时彩走势图彩票app 进入DG mg真人_app 秒速赛车玩法图_Welcome 河南11选5开奖信息 广西快乐10分官网 im体育怎么提现 香港麻将馆 彩的微信名 香港正版资料两码中特 辽宁快乐12开奖预测专家 黑龙江快乐十分今日走势图 幸运飞艇qq微信群 云南快乐十分钟电子屏