在python開發中,有些情況下,我們可能面臨在一台機器上同時安裝多版本python的需求。比如:
那麼,如何高效地在單台機器上實現多個版本python(具體來說,這裡python指的是python直譯器)的安裝和維護呢?
除此之外,我們還可能面臨在一台機器上安裝多個版本的某個python第三方庫的需求。比如:有多個python專案,每個專案依賴於不同版本的python第三方庫requests
。這時候,如何在單台機器上實現多版本pythonrequests
庫的安裝和維護呢?
本文介紹一款神器。它提供了最簡潔的方法,讓上述兩種需求同時得到滿足。
實現多版本python管理的工具叫做pyenv
。它的安裝命令為:
curl | bash
複製**
安裝完成後,需要進行簡單配置。將下面幾行配置資訊新增到檔案~/.bashrc
中,然後執行命令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的編譯和安裝的。因此,我們需要先安裝編譯相關的一些依賴包。由於這些依賴是作業系統相關的。因此,不同的作業系統,安裝命令不同。
以常見的ubuntu/debian系統為例,安裝命令為:
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
複製**
現在就可以使用pyenv
安裝python了。安裝新版本之前,我們先檢視系統當前安裝的python版本:
root@hzettv53:~# pyenv versions
* system (set by /root/.pyenv/version)
root@hzettv53:~# python -v
python 2.7.12
進python群:835017344,獲取python學習資料
可見,當前使用的是作業系統自帶的python,其版本為2.7.12。這時,如果我們需要安裝乙個新的版本,例如python 3.7.2, 只需執行命令:
pyenv install -v 3.7.2
複製**
注意,由於pyenv
是基於python源**進行編譯安裝,因此這一步驟會有點慢,需要耐心等待。安裝完成後,檢視系統中的python版本:
root@hzettv53:~# pyenv versions
* system (set by /root/.pyenv/version)
3.7.2
root@hzettv53:~# python -v
python 2.7.12
複製**
可以看到,系統中已經有兩個版本的python了。但是當前使用的仍然是系統版本。如果想要使用新安裝的版本,只需:
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,那麼可以執行:pyenv local 3.7.2
;如果只想在當前shell環境中使用python 3.7.2,那麼可以執行:pyenv shell 3.7.2
。
如果同時設定了global, local和shell三種python版本,那麼哪一種會真正生效呢?這裡有乙個優先順序排序,即shell > local > global。舉例來說,如果先後執行了pyenv local 3.7.2
和pyenv global 3.7.3
,那麼由於local的優先順序高於global,所以當前生效的python版本是3.7.2。
這樣,我們便很方便地實現了單一機器上安裝多個版本的python,並且可以根據實際需要,靈活地切換python版本。
不同專案之間,不僅依賴的python版本可能不同,而且依賴的python第三方庫的版本也可能不同。我們將專案所依賴的python及其第三方庫統一稱為虛擬環境。如果同時存在多個python專案,各自依賴不同的虛擬環境,如何有效管理呢?
這時,我們仍然可以使用pyenv
來達成我們的目標。使用下述命令可以建立乙個指定python版本的虛擬環境。
pyenv virtualenv 複製**
虛擬環境的名稱建議體現python專案名稱。例如,我們有乙個叫做myproject
的專案,並且基於python 3.7.2
進行開發,那麼可以執行命令:
pyenv virtualenv 3.7.2 myprojectenv
複製**
這樣,我們便建立了乙個名為myprojectenv
的虛擬環境。那麼如何使用它呢?我們在需要使用這個虛擬環境的地方(例如,cd到專案myproject
的資料夾路徑),執行以下命令即可:
pyenv local myprojectenv
複製**
這時,我們可以看到,當前使用的python和pip都指向的是虛擬環境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第三方包,都是安裝到了虛擬環境myprojectenv
的路徑下,而不是系統路徑。這樣,我們便實現了python專案和其所依賴的python開發環境(即虛擬環境)的繫結。不同的python專案,完全可以各自使用不同的python虛擬環境,互不影響。
那麼,如果乙個python專案需要使用兩種python虛擬環境呢?我們只需要建立兩個虛擬環境(例如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
進python群:835017344,獲取python學習資料
開發環境的高效管理是軟體工程中的乙個難題,尤其是需要同時維護多個環境的時候。pyenv
提供了在單台機器上實現多版本python和多型別python虛擬環境的有效管理。pyenv
的使用十分簡單,易於上手。 推薦一款網遊
三月王朝 也叫帝國霸略 挺不錯的,優點 20 多人約好晚上一起打都城,很帶勁。qq飛車採用了世界級的物理引擎physx,採納專業車手的建議,手感全面超越市場領先產品。qq飛車完全免費,qq號碼即可登陸。專為qq使用者設計的時尚的人物造型,爽快的漂移快感,帥哥與美女同在,速度與激情並存,帶你進入眩目的...
推薦一款辦公軟體!
前天電腦goust了,發現沒有裝win office等辦公軟體,呵呵,之前就想用下國產的這款辦公軟體了,現在終於有了很好的藉口來使用了,從次丟棄win office!軟體介紹 wps office 2007個人版對個人使用者永久免費,包含wps文字 wps wps演示三大功能模組,與ms offic...
Crab,一款python上優秀的推薦系統引擎
今天,逛網頁發現了一款推薦系統的引擎 crab。它是python的乙個開源包,整個推薦系統的構架已經寫好,其中的推薦演算法可以自己定義,在此構架上進行推薦演算法的研究可以提高效率。1 crab的安裝 1 在安裝之前,需要一些python包和其他一些,這些是numpy,scipy,setuptools...