您好,登錄后才能下訂單哦!
今天小編給大家分享的是python中pyenv虛擬環境管理工具的使用方法,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,話不多說,一起往下看吧。
在學習Python的時候,最經常遇到的問題就是包版本的問題,比如說這個應用需要libtool包的1.1.1版本,而之前開發的應用則只能運行在1.0.1版本上。那么怎么讓兩個應用都能夠正常運行起來呢?聰明的開發者們提出了虛擬環境的概念,就像電腦的虛擬機一樣,創建一個虛擬環境就像創建了虛擬機。你在虛擬環境里做任何操作都不會影響到其他的虛擬環境,也不會影響到系統環境。同時你也可以在你的虛擬環境里安裝任何版本的包來進行測試。
在昨天的文章里介紹了Python使用的比較多的一個虛擬環境管理包virtualenv,這個包用在windows系統上比較多。而在Linux/Unix系統上用的比較多的是另外一個虛擬環境管理工具pyenv。
pyenv是一個虛擬環境管理工具,可以同時管理多個Python版本,并能以這些Python版本為模板來創建不同的虛擬環境,而且可以靈活的在這些虛擬環境之間進行切換。它具有以下優點:
既然這么方便,那么我們來看一下它是怎么使用的吧。
目前這個軟件還不支持在windows系統上使用,暫時只支持在Linux和Unix上安裝。對于macOS,可以使用Homebrew來安裝,官方文檔上對應的鏈接是:https://github.com/pyenv/pyenv#homebrew-on-macos
對于Linux/Unix用戶來說,有兩種安裝方式,第一種是根據官方文檔來一步步安裝,步驟如下:
克隆安裝軟件。命令是
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
定義環境變量
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
對于使用zsh的用戶,需要把 ~/.bash_profile
改成~/.zshrc
。
對于使用Ubuntu的用戶,需要把 ~/.bash_profile
改成~/.bashrc
將pyenv init命令添加到shell里已啟用shims和自動補全,shims是用于多版本Python選擇的工具,添加命令如下:
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
對于使用zsh的用戶,需要把 ~/.bash_profile
改成~/.zshrc
。
對于使用Ubuntu的用戶,需要把 ~/.bash_profile
改成~/.bashrc
$ exec "$SHELL"
上面的安裝步驟看起來非常繁瑣對吧,官方也因此提供了一個一鍵安裝腳本,通過這個一鍵安裝腳本,上面的3個步驟都可以省略了,安裝腳本的命令是:
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
注意:需要提前安裝好git,因為它也是先通過git克隆到本地。
腳本執行過程如下:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 148 100 148 0 0 20 0 0:00:07 0:00:07 --:--:-- 39
100 2454 100 2454 0 0 94 0 0:00:26 0:00:26 --:--:-- 668
Cloning into '/root/.pyenv'...
remote: Enumerating objects: 670, done.
remote: Counting objects: 100% (670/670), done.
remote: Compressing objects: 100% (503/503), done.
remote: Total 670 (delta 335), reused 255 (delta 76), pack-reused 0
Receiving objects: 100% (670/670), 380.59 KiB | 30.00 KiB/s, done.
Resolving deltas: 100% (335/335), done.
....
Cloning into '/root/.pyenv/plugins/pyenv-which-ext'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (10/10), done.
這中間會克隆多個包,輸出信息比較長,內容類似,所以這里省略了一部分。腳本執行完畢以后,會提示你,沒有把pyenv添加到PATH路徑,然后你根據它的提示添加一下。提示內容如下所示:
WARNING: seems you still have not added 'pyenv' to the load path.
# Load pyenv automatically by adding
# the following to ~/.bashrc:
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
我們需要執行的操作是,打開~/.bashrc
文件,把最下面三行添加進去,添加好的~/.bashrc
文件如下所示:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
保存退出,然后執行一下命令:
source ~/.bashrc
讓配置生效。
到這里,pyenv就已經安裝好了。然后我們執行命令pyenv versions
:
[root@adminnode ~]# pyenv versions
* system (set by /root/.pyenv/version)
這個命令不是查看pyenv的版本的,而是查看當前系統上安裝了哪幾個版本的Python,正常情況下剛安裝好只有一個system,對應的是系統的python版本。例如CentOS7默認是python2.7,而CentOS 8現在默認是python3.6。
因此如果我們想使用其他版本的python作為虛擬環境的模板時,就需要自己來安裝對應的版本,比如現在Python的最新版本已經到了3.8.2版本,我希望以這個版本來作為模板。那么我就需要安裝3.8.2。
yum install -y gcc make patch gdbm-devel openssl-devel sqlite-devel \
readline-devel zlib-devel bzip2-devel libffi-devel
這一步如果是在國內的服務器或虛擬機上建議操作,因為我們自己不下載的話,pyenv它默認會到python.org的官網上去下載源碼包,因為不同地區的網絡環境不一樣,可能會導致這一步特別慢,甚至會直接失敗。因此我們推薦首先自己到python官網下載好源碼包。然后上傳到你的服務器上,然后拷貝到pyenv的緩存目錄中,如下所示:
[root@adminnode ~]# ls
anaconda-ks.cfg Python-3.8.2.tar.xz
[root@adminnode ~]# mkdir ~/.pyenv/cache
[root@adminnode ~]#
[root@adminnode ~]# cp Python-3.8.2.tar.xz ~/.pyenv/cache/
然后再執行安裝命令的時候,它就會自動使用緩存里的源碼包,這樣安裝速度就會比較快。
[root@adminnode ~]# pyenv install 3.8.2
Installing Python-3.8.2...
Installed Python-3.8.2 to /root/.pyenv/versions/3.8.2
耐心等待它安裝完成,這里安裝命令后面直接跟上python對應的版本號即可。安裝完成后,所有版本的python都是安裝在/root/.pyenv/versions目錄下,如下所示:
[root@adminnode ~]# ls /root/.pyenv/versions/
3.8.2
然后我們再查看已經安裝的版本信息,就能夠看到新安裝的3.8.2,如下所示:
[root@adminnode ~]# pyenv versions
* system (set by /root/.pyenv/version)
3.8.2
既然模板搭建好了,那么我們現在就可以使用這個模板來創建我們需要的虛擬環境。在創建之前我們需要說幾個注意的點:
下面我們來看一個創建虛擬環境具體的例子,創建虛擬環境的命令基本格式是:
pyenv virtualenv template_version virtualenv_name
template_version指的是模板的版本號,virutalenv_name指的是虛擬環境名詞,一般是你的項目的名稱。假設我們要開發一個cmdb項目,那么我們就來創建一個cmdb的虛擬環境,如下所示:
[root@adminnode ~]# pyenv virtualenv 3.8.2 cmdb
Looking in links: /tmp/tmp_42mjdiv
Requirement already satisfied: setuptools in /root/.pyenv/versions/3.8.2/envs/cmdb/lib/python3.8/site-packages (41.2.0)
Requirement already satisfied: pip in /root/.pyenv/versions/3.8.2/envs/cmdb/lib/python3.8/site-packages (19.2.3)
[root@adminnode ~]# pyenv versions
* system (set by /root/.pyenv/version)
3.8.2
3.8.2/envs/cmdb
cmdb
這個時候就能看到創建好的虛擬環境名稱,但是也可以看到當前目錄下的python版本還是system,那么怎么切換到cmdb版本呢?
pyenv是以目錄為單位來進行版本控制的,比如說你單獨一個項目有一個項目目錄,我在項目目錄下設置好這個項目的python版本,那么項目的子目錄全部會自動繼承這個配置。設置目錄的python版本命令是:
pyenv local virtualenv_name
示例如下:
[root@adminnode ~]# mkdir cmdb
[root@adminnode ~]# ls
anaconda-ks.cfg cmdb docker Python-3.8.2.tar.xz
[root@adminnode ~]# cd cmdb
[root@adminnode cmdb]# pyenv local cmdb
(cmdb) [root@adminnode cmdb]#
在上面的代碼中我們可以看到,切換到項目cmdb目錄下以后,設置該目錄的虛擬環境為cmdb,然后我們從shell的提示符中可以看到,前面多了一個(cmdb)的提示,表示我們進入到虛擬環境了,也就是說這個時候就是一個獨立的python開發環境。我們看一下這個目錄的內容,如下所示:
(cmdb) [root@adminnode cmdb]# ls -al
total 8
drwxr-xr-x. 2 root root 29 Mar 3 11:29 .
dr-xr-x---. 9 root root 4096 Mar 3 11:24 ..
-rw-r--r--. 1 root root 5 Mar 3 11:29 .python-version
(cmdb) [root@adminnode cmdb]# cat .python-version
cmdb
可以看到多了一個隱藏文件.python-version,文件內容是cmdb,也就是說pyenv是通過這個文件來控制當前目錄下的虛擬環境。
當開發項目越來越多以后,可能虛擬環境的信息也會越來越多,因此就需要刪除一些不再使用的虛擬環境,這個時候就需要用到刪除命令,如下所示:
pyenv virtualenv-delete virtualenv_name
但是刪除之前,建議你通過虛擬環境的pip命令導出虛擬環境下的包列表,命令是:
pip freeze --all > requirements.txt
將已安裝的包導出到requirements.txt文件中,然后再刪除這個虛擬環境:
(cmdb) [root@adminnode cmdb]# pyenv virtualenv-delete cmdb
pyenv-virtualenv: remove /root/.pyenv/versions/3.8.2/envs/cmdb? y
[root@adminnode cmdb]# ls -al
total 12
drwxr-xr-x. 2 root root 53 Mar 3 11:41 .
dr-xr-x---. 9 root root 4096 Mar 3 11:24 ..
-rw-r--r--. 1 root root 5 Mar 3 11:29 .python-version
-rw-r--r--. 1 root root 31 Mar 3 11:41 requirements.txt
[root@adminnode cmdb]# cat .python-version
cmdb
刪除完成后,當前目錄下的.python-version文件還存在,但是因為找不到對應的虛擬環境信息,此時就無法生效。
看完上述內容,你們對python中pyenv虛擬環境管理工具的使用方法大概了解了嗎?如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。