Python多版本開發(fā)環(huán)境管理工具介紹
前言
在Python開發(fā)中,有些情況下,我們可能面臨在一臺機器上同時安裝多版本Python的需求。比如:
有多個Python項目,每個項目依賴不同的Python版本。
有一個Python項目,它需要同時支持多個Python版本。
那么,如何高效地在單臺機器上實現(xiàn)多個版本Python(具體來說,這里Python指的是Python解釋器)的安裝和維護呢?
除此之外,我們還可能面臨在一臺機器上安裝多個版本的某個Python第三方庫的需求。比如:有多個Python項目,每個項目依賴于不同版本的Python第三方庫requests。這時候,如何在單臺機器上實現(xiàn)多版本Python requests庫的安裝和維護呢?
本文介紹一款神器。它提供了最簡潔的方法,讓上述兩種需求同時得到滿足。
多版本Python管理
實現(xiàn)多版本Python管理的工具叫做pyenv。它的安裝命令為:
curl https://pyenv.run | bash
安裝完成后,需要進行簡單配置。將下面幾行配置信息添加到文件~/.bashrc中,然后執(zhí)行命令exec "$SHELL",讓配置生效。
export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
接著,可以通過查看pyenv版本來檢查安裝和配置是否成功:
root@hzettv53:~# pyenv -v pyenv 1.2.12
由于pyenv是基于源代碼進行Python的編譯和安裝的。因此,我們需要先安裝編譯相關(guān)的一些依賴包。由于這些依賴是操作系統(tǒng)相關(guān)的。因此,不同的操作系統(tǒng),安裝命令不同。
以常見的Ubuntu/Debian系統(tǒng)為例,安裝命令為:
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
現(xiàn)在就可以使用pyenv安裝Python了。安裝新版本之前,我們先查看系統(tǒng)當前安裝的Python版本:
root@hzettv53:~# pyenv versions * system (set by /root/.pyenv/version) root@hzettv53:~# python -V Python 2.7.12
可見,當前使用的是操作系統(tǒng)自帶的Python,其版本為2.7.12。這時,如果我們需要安裝一個新的版本,例如Python 3.7.2, 只需執(zhí)行命令:
pyenv install -v 3.7.2
注意,由于pyenv是基于Python源代碼進行編譯安裝,因此這一步驟會有點慢,需要耐心等待。安裝完成后,查看系統(tǒng)中的Python版本:
root@hzettv53:~# pyenv versions * system (set by /root/.pyenv/version) 3.7.2 root@hzettv53:~# python -V Python 2.7.12
可以看到,系統(tǒng)中已經(jīng)有兩個版本的Python了。但是當前使用的仍然是系統(tǒng)版本。如果想要使用新安裝的版本,只需:
root@hzettv53:~# pyenv global 3.7.2 root@hzettv53:~# pyenv versions system * 3.7.2 (set by /root/.pyenv/version) root@hzettv53:~# python -V Python 3.7.2
這里命令pyenv global 3.7.2改變了全局的Python版本。如果只想在當前文件夾中使用Python 3.7.2,那么可以執(zhí)行:pyenv local 3.7.2;如果只想在當前Shell環(huán)境中使用Python 3.7.2,那么可以執(zhí)行:pyenv shell 3.7.2。
如果同時設(shè)置了global, local和shell三種Python版本,那么哪一種會真正生效呢?這里有一個優(yōu)先級排序,即shell > local > global。舉例來說,如果先后執(zhí)行了pyenv local 3.7.2和pyenv global 3.7.3,那么由于local的優(yōu)先級高于global,所以當前生效的Python版本是3.7.2。
這樣,我們便很方便地實現(xiàn)了單一機器上安裝多個版本的Python,并且可以根據(jù)實際需要,靈活地切換Python版本。
多虛擬環(huán)境管理
不同項目之間,不僅依賴的Python版本可能不同,而且依賴的Python第三方庫的版本也可能不同。我們將項目所依賴的Python及其第三方庫統(tǒng)一稱為虛擬環(huán)境。如果同時存在多個Python項目,各自依賴不同的虛擬環(huán)境,如何有效管理呢?
這時,我們?nèi)匀豢梢允褂胮yenv來達成我們的目標。使用下述命令可以創(chuàng)建一個指定Python版本的虛擬環(huán)境。
pyenv virtualenv <python_version> <environment_name>
虛擬環(huán)境的名稱建議體現(xiàn)Python項目名稱。例如,我們有一個叫做myproject的項目,并且基于Python 3.7.2進行開發(fā),那么可以執(zhí)行命令:
pyenv virtualenv 3.7.2 myprojectenv
這樣,我們便創(chuàng)建了一個名為myprojectenv的虛擬環(huán)境。那么如何使用它呢?我們在需要使用這個虛擬環(huán)境的地方(例如,cd到項目myproject的文件夾路徑),執(zhí)行以下命令即可:
pyenv local myprojectenv
這時,我們可以看到,當前使用的Python和pip都指向的是虛擬環(huán)境myprojectenv:
root@hzettv53:~/workspace/test# pyenv which python /root/.pyenv/versions/myprojectenv/bin/python root@hzettv53:~/workspace/test# pyenv which pip /root/.pyenv/versions/myprojectenv/bin/pip
這意味著,我們此時用pip命令安裝的所有Python第三方包,都是安裝到了虛擬環(huán)境myprojectenv的路徑下,而不是系統(tǒng)路徑。這樣,我們便實現(xiàn)了Python項目和其所依賴的Python開發(fā)環(huán)境(即虛擬環(huán)境)的綁定。不同的Python項目,完全可以各自使用不同的Python虛擬環(huán)境,互不影響。
那么,如果一個Python項目需要使用兩種Python虛擬環(huán)境呢?我們只需要創(chuàng)建兩個虛擬環(huán)境(例如myprojectenv和myprojectenv2),并且在使用時進行切換即可:
root@hzettv53:~/workspace/myproject# pyenv local myprojectenv root@hzettv53:~/workspace/myproject:~# python -V Python 3.7.2 root@hzettv53:~/workspace/myproject# pyenv local myprojectenv2 root@hzettv53:~/workspace/myproject:~# python -V Python 2.7.12
總結(jié)
開發(fā)環(huán)境的高效管理是軟件工程中的一個難題,尤其是需要同時維護多個環(huán)境的時候。pyenv提供了在單臺機器上實現(xiàn)多版本Python和多類型Python虛擬環(huán)境的有效管理。pyenv的使用十分簡單,易于上手。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python郵件中附加文字、html、圖片、附件實現(xiàn)方法
在本篇文章里小編給大家整理了一篇關(guān)于python郵件中附加文字、html、圖片、附件實現(xiàn)方法,有興趣的朋友們跟著學(xué)習下。2021-01-01python中l(wèi)ambda函數(shù) list comprehension 和 zip函數(shù)使用指南
這篇文章主要介紹了python中l(wèi)ambda函數(shù) list comprehension 和 zip函數(shù)使用方法,非常的實用,有需要的朋友可以參考下2014-09-09數(shù)據(jù)挖掘之Apriori算法詳解和Python實現(xiàn)代碼分享
這篇文章主要介紹了數(shù)據(jù)挖掘之Apriori算法詳解和Python實現(xiàn)代碼分享,本文先是對Apriori算法做了詳細介紹,然后給出了Python版實現(xiàn)代碼,需要的朋友可以參考下2014-11-11Python全局變量與global關(guān)鍵字常見錯誤解決方案
這篇文章主要介紹了Python全局變量與global關(guān)鍵字常見錯誤解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2020-10-10python matplotlib畫盒圖、子圖解決坐標軸標簽重疊的問題
今天小編就為大家分享一篇python matplotlib畫盒圖、子圖解決坐標軸標簽重疊的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01