今天小編給大家分享的是python中pyenv虛擬環(huán)境管理工具的使用方法,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說,一起往下看吧。
創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)成華,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
在學(xué)習(xí)Python的時(shí)候,最經(jīng)常遇到的問題就是包版本的問題,比如說這個(gè)應(yīng)用需要libtool包的1.1.1版本,而之前開發(fā)的應(yīng)用則只能運(yùn)行在1.0.1版本上。那么怎么讓兩個(gè)應(yīng)用都能夠正常運(yùn)行起來呢?聰明的開發(fā)者們提出了虛擬環(huán)境的概念,就像電腦的虛擬機(jī)一樣,創(chuàng)建一個(gè)虛擬環(huán)境就像創(chuàng)建了虛擬機(jī)。你在虛擬環(huán)境里做任何操作都不會(huì)影響到其他的虛擬環(huán)境,也不會(huì)影響到系統(tǒng)環(huán)境。同時(shí)你也可以在你的虛擬環(huán)境里安裝任何版本的包來進(jìn)行測試。
在昨天的文章里介紹了Python使用的比較多的一個(gè)虛擬環(huán)境管理包virtualenv,這個(gè)包用在windows系統(tǒng)上比較多。而在Linux/Unix系統(tǒng)上用的比較多的是另外一個(gè)虛擬環(huán)境管理工具pyenv。
pyenv是一個(gè)虛擬環(huán)境管理工具,可以同時(shí)管理多個(gè)Python版本,并能以這些Python版本為模板來創(chuàng)建不同的虛擬環(huán)境,而且可以靈活的在這些虛擬環(huán)境之間進(jìn)行切換。它具有以下優(yōu)點(diǎn):
既然這么方便,那么我們來看一下它是怎么使用的吧。
目前這個(gè)軟件還不支持在windows系統(tǒng)上使用,暫時(shí)只支持在Linux和Unix上安裝。對于macOS,可以使用Homebrew來安裝,官方文檔上對應(yīng)的鏈接是:https://github.com/pyenv/pyenv#homebrew-on-macos
對于Linux/Unix用戶來說,有兩種安裝方式,第一種是根據(jù)官方文檔來一步步安裝,步驟如下:
克隆安裝軟件。命令是
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
定義環(huán)境變量
$ 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和自動(dòng)補(bǔ)全,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"
上面的安裝步驟看起來非常繁瑣對吧,官方也因此提供了一個(gè)一鍵安裝腳本,通過這個(gè)一鍵安裝腳本,上面的3個(gè)步驟都可以省略了,安裝腳本的命令是:
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
注意:需要提前安裝好git,因?yàn)樗彩窍韧ㄟ^git克隆到本地。
腳本執(zhí)行過程如下:
% 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.
這中間會(huì)克隆多個(gè)包,輸出信息比較長,內(nèi)容類似,所以這里省略了一部分。腳本執(zhí)行完畢以后,會(huì)提示你,沒有把pyenv添加到PATH路徑,然后你根據(jù)它的提示添加一下。提示內(nèi)容如下所示:
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 -)"
我們需要執(zhí)行的操作是,打開~/.bashrc
文件,把最下面三行添加進(jìn)去,添加好的~/.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 -)"
保存退出,然后執(zhí)行一下命令:
source ~/.bashrc
讓配置生效。
到這里,pyenv就已經(jīng)安裝好了。然后我們執(zhí)行命令pyenv versions
:
[root@adminnode ~]# pyenv versions
* system (set by /root/.pyenv/version)
這個(gè)命令不是查看pyenv的版本的,而是查看當(dāng)前系統(tǒng)上安裝了哪幾個(gè)版本的Python,正常情況下剛安裝好只有一個(gè)system,對應(yīng)的是系統(tǒng)的python版本。例如CentOS7默認(rèn)是python2.7,而CentOS 8現(xiàn)在默認(rèn)是python3.6。
因此如果我們想使用其他版本的python作為虛擬環(huán)境的模板時(shí),就需要自己來安裝對應(yīng)的版本,比如現(xiàn)在Python的最新版本已經(jīng)到了3.8.2版本,我希望以這個(gè)版本來作為模板。那么我就需要安裝3.8.2。
yum install -y gcc make patch gdbm-devel openssl-devel sqlite-devel \
readline-devel zlib-devel bzip2-devel libffi-devel
這一步如果是在國內(nèi)的服務(wù)器或虛擬機(jī)上建議操作,因?yàn)槲覀冏约翰幌螺d的話,pyenv它默認(rèn)會(huì)到python.org的官網(wǎng)上去下載源碼包,因?yàn)椴煌貐^(qū)的網(wǎng)絡(luò)環(huán)境不一樣,可能會(huì)導(dǎo)致這一步特別慢,甚至?xí)苯邮 R虼宋覀兺扑]首先自己到python官網(wǎng)下載好源碼包。然后上傳到你的服務(wù)器上,然后拷貝到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/
然后再執(zhí)行安裝命令的時(shí)候,它就會(huì)自動(dòng)使用緩存里的源碼包,這樣安裝速度就會(huì)比較快。
[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對應(yīng)的版本號即可。安裝完成后,所有版本的python都是安裝在/root/.pyenv/versions目錄下,如下所示:
[root@adminnode ~]# ls /root/.pyenv/versions/
3.8.2
然后我們再查看已經(jīng)安裝的版本信息,就能夠看到新安裝的3.8.2,如下所示:
[root@adminnode ~]# pyenv versions
* system (set by /root/.pyenv/version)
3.8.2
既然模板搭建好了,那么我們現(xiàn)在就可以使用這個(gè)模板來創(chuàng)建我們需要的虛擬環(huán)境。在創(chuàng)建之前我們需要說幾個(gè)注意的點(diǎn):
下面我們來看一個(gè)創(chuàng)建虛擬環(huán)境具體的例子,創(chuàng)建虛擬環(huán)境的命令基本格式是:
pyenv virtualenv template_version virtualenv_name
template_version指的是模板的版本號,virutalenv_name指的是虛擬環(huán)境名詞,一般是你的項(xiàng)目的名稱。假設(shè)我們要開發(fā)一個(gè)cmdb項(xiàng)目,那么我們就來創(chuàng)建一個(gè)cmdb的虛擬環(huán)境,如下所示:
[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
這個(gè)時(shí)候就能看到創(chuàng)建好的虛擬環(huán)境名稱,但是也可以看到當(dāng)前目錄下的python版本還是system,那么怎么切換到cmdb版本呢?
pyenv是以目錄為單位來進(jìn)行版本控制的,比如說你單獨(dú)一個(gè)項(xiàng)目有一個(gè)項(xiàng)目目錄,我在項(xiàng)目目錄下設(shè)置好這個(gè)項(xiàng)目的python版本,那么項(xiàng)目的子目錄全部會(huì)自動(dòng)繼承這個(gè)配置。設(shè)置目錄的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]#
在上面的代碼中我們可以看到,切換到項(xiàng)目cmdb目錄下以后,設(shè)置該目錄的虛擬環(huán)境為cmdb,然后我們從shell的提示符中可以看到,前面多了一個(gè)(cmdb)的提示,表示我們進(jìn)入到虛擬環(huán)境了,也就是說這個(gè)時(shí)候就是一個(gè)獨(dú)立的python開發(fā)環(huán)境。我們看一下這個(gè)目錄的內(nèi)容,如下所示:
(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
可以看到多了一個(gè)隱藏文件.python-version,文件內(nèi)容是cmdb,也就是說pyenv是通過這個(gè)文件來控制當(dāng)前目錄下的虛擬環(huán)境。
當(dāng)開發(fā)項(xiàng)目越來越多以后,可能虛擬環(huán)境的信息也會(huì)越來越多,因此就需要?jiǎng)h除一些不再使用的虛擬環(huán)境,這個(gè)時(shí)候就需要用到刪除命令,如下所示:
pyenv virtualenv-delete virtualenv_name
但是刪除之前,建議你通過虛擬環(huán)境的pip命令導(dǎo)出虛擬環(huán)境下的包列表,命令是:
pip freeze --all > requirements.txt
將已安裝的包導(dǎo)出到requirements.txt文件中,然后再刪除這個(gè)虛擬環(huán)境:
(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
刪除完成后,當(dāng)前目錄下的.python-version文件還存在,但是因?yàn)檎也坏綄?yīng)的虛擬環(huán)境信息,此時(shí)就無法生效。
看完上述內(nèi)容,你們對python中pyenv虛擬環(huán)境管理工具的使用方法大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當(dāng)前題目:python中pyenv虛擬環(huán)境管理工具的使用方法
網(wǎng)站URL:http://jinyejixie.com/article22/iishjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、用戶體驗(yàn)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)