Python多環(huán)境擴(kuò)展管理-Virtualenv

Python多環(huán)境管理工具,這兩款可能都不錯(cuò): Pyenv 和 Virtualenv 。
Pyenv ,是對(duì)Python的版本進(jìn)行管理,實(shí)現(xiàn)版本的切換。
Virtualenv ,是通過(guò)創(chuàng)建虛擬環(huán)境,實(shí)現(xiàn)Python環(huán)境間的隔離,避免相互干擾。
現(xiàn)在可以用python自帶的venv模塊,和Virtualenv似乎是一樣的。不需要安裝,直接就能通過(guò)python模塊調(diào)用了。

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)桐鄉(xiāng),10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

Virtualenv 部署

現(xiàn)在已經(jīng)不需要安裝了,直接使用python的venv模塊,直接就能創(chuàng)建虛擬環(huán)境目錄。這段跳過(guò)。
首先得先準(zhǔn)備好Python和pip。Windows系統(tǒng)去官網(wǎng)下載安裝后就都有了。
CentOS7安裝python3可以看這篇:https://blog.51cto.com/steed/2288045
用pip安裝Virtualenv

pip install virtualenv

安裝過(guò)程:

$ pip install virtualenv
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
    100% |████████████████████████████████| 1.9MB 59kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0
$

使用方法

如果是使用python的venv模塊,這段跳過(guò)。
這段可以跳過(guò),看下面的小節(jié),直接干
命令使用格式如下:

virtualenv [選項(xiàng)] 目標(biāo)目錄

最基本的用法,創(chuàng)建虛擬目錄就是這樣:

virtualenv /opt/ansible/venv

上面的命令將會(huì)創(chuàng)建指定的文件夾,包含了Python可執(zhí)行文件,以及 pip 庫(kù)的一份拷貝。如果你的本地 pip 庫(kù)已經(jīng)裝了別的模塊了,那么新的虛擬環(huán)境也會(huì)包含這些模塊。如果不想這樣,就要加上一些參數(shù)選項(xiàng)。
下面列出了一些可用的選項(xiàng):

  • --version :顯示當(dāng)前版本號(hào)
  • -h, --help :顯示幫助信息
  • -v, --verbose :顯示詳細(xì)信息
  • -q, --quiet :不顯示詳細(xì)信息
  • -p PYTHON_EXE, --python=PYTHON_EXE :指定所用的python解析器的版本(下面會(huì)展開(kāi))
  • --clear :清空非root用戶的安裝,并從頭開(kāi)始創(chuàng)建隔離環(huán)境
  • --no-site-packages :令隔離環(huán)境不能訪問(wèn)系統(tǒng)全局的 site-packages 目錄。意思看不懂,下一節(jié)會(huì)用到
  • --system-site-packages :令隔離環(huán)境可以訪問(wèn)系統(tǒng)全局的 site-packages 目錄
  • --unzip-setuptools :安裝時(shí)解壓 Setuptools 或 Distribute 。
  • --relocatable :重定位某個(gè)已經(jīng)存在的隔離環(huán)境。使用該選項(xiàng)將修正腳本,并令所有.pth文件使用相應(yīng)路徑。
  • --distribute :使用 Distribute 代替 Setuotools ,也可設(shè)置環(huán)境變量 VIRTUALENV_DISTRIBUTE 達(dá)到同樣效果。
  • --extra-search-dir=SEARCH_DIRS :用于查找 setuptools、distribute、pip 發(fā)布包的目錄??梢约佣鄠€(gè)路徑。
  • --never-download :禁止從網(wǎng)上下載任何數(shù)據(jù)。如果用上面的路徑在本地搜索失敗,會(huì)報(bào)錯(cuò)。
  • --prompt==PROMPT :定義隔離環(huán)境的命令行前綴。

用下面的命令,可以選擇指定的Python解釋器創(chuàng)建虛擬環(huán)境:

$ virtualenv -p /usr/bin/python2.7 venv

如果有多個(gè)Python解釋器,比如在CentOS7上安裝python3.6。默認(rèn)的Python解釋器不是要使用的,就要用 -p 參數(shù)設(shè)置一下了。
默認(rèn)使用的解釋器,可能是根據(jù) pip 來(lái)決定的。我試的時(shí)候,CentOS默認(rèn)有python2.7,我又安裝了python3.6。使用python命令啟動(dòng)的是python2.7。但是python2.7沒(méi)有安裝 pip , pip 是安裝在 python3.6 下的。啟動(dòng) pip 用的是python3.6,如下:

$ pip -V
pip 18.1 from /usr/local/lib/python3.6/site-packages/pip-18.1-py3.6.egg/pip (python 3.6)

我實(shí)際安裝虛擬環(huán)境的時(shí)候,沒(méi)有用 -p 指定解釋器,默認(rèn)用的也是 python3.6 。

創(chuàng)建虛擬環(huán)境

使用python的venv模塊,直接調(diào)用模塊創(chuàng)建虛擬環(huán)境。放在在后面,這段跳過(guò)。
創(chuàng)建工作目錄:

$ mkdir /opt/ansible

在工作目錄下,創(chuàng)建一個(gè)獨(dú)立的虛擬環(huán)境,命名為venv:

$ cd /opt/ansible
$ virtualenv --no-site-packages venv
Using base prefix '/usr'
New python executable in /opt/ansible/venv/bin/python3.6
Also creating executable in /opt/ansible/venv/bin/python
Installing setuptools, pip, wheel...done.
$ 

命令virtualenv就可以創(chuàng)建一個(gè)獨(dú)立的Python運(yùn)行環(huán)境,我們還加上了參數(shù)--no-site-packages,這樣,已經(jīng)安裝到系統(tǒng)Python環(huán)境中的所有第三方包都不會(huì)復(fù)制過(guò)來(lái),這樣,我們就得到了一個(gè)不帶任何第三方包的“干凈”的Python運(yùn)行環(huán)境。

使用虛擬環(huán)境

python的venv模塊和這個(gè)似乎是一樣的,用法也是一樣的。所以使用的操作可以參考。
使用source命令可以進(jìn)入指定的虛擬環(huán)境,命令后面要跟虛擬環(huán)境目錄下的 bin/activate 文件:

$ source /opt/ansible/venv/bin/activate
(venv) $ 

退出虛擬環(huán)境用Deactivate命令:

(venv) $ deactivate
$ 

這里都注意一下切換虛擬環(huán)境前后命令提示符的變化

Windows平臺(tái)
如果是Windows平臺(tái),則分別執(zhí)行這2個(gè)bat文件:

> activate.bat
> deactivate.bat

測(cè)試

下面切換到虛擬環(huán)境下,安裝個(gè)模塊試下:

$ source /opt/ansible/venv/bin/activate
(venv) $ pip install ansible

""" 中間的安裝日志就省略了 """

Successfully built ansible PyYAML MarkupSafe pycparser
Installing collected packages: MarkupSafe, jinja2, PyYAML, pycparser, cffi, six, pynacl, asn1crypto, idna, cryptography, bcrypt, pyasn1, paramiko, ansible
Successfully installed MarkupSafe-1.0 PyYAML-3.13 ansible-2.7.0 asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.5 cryptography-2.3.1 idna-2.7 jinja2-2.10 paramiko-2.4.2 pyasn1-0.4.4 pycparser-2.19 pynacl-1.3.0 six-1.11.0
(venv) $ ansible --version
ansible 2.7.0
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/ansible/venv/lib/python3.6/site-packages/ansible
  executable location = /opt/ansible/venv/bin/ansible
  python version = 3.6.6 (default, Aug 13 2018, 18:24:23) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
(venv) $ deactivate 
$ ansible --version
-bash: ansible: 未找到命令
$ /opt/ansible/venv/bin/ansible --version
ansible 2.7.0
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/ansible/venv/lib/python3.6/site-packages/ansible
  executable location = /opt/ansible/venv/bin/ansible
  python version = 3.6.6 (default, Aug 13 2018, 18:24:23) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
$ 

切換到虛擬環(huán)境下安裝,安裝完之后,可以使用安裝的模塊。
然后退出虛擬環(huán)境,再次嘗試使用之前的模塊,就提示找不到命令了。
其實(shí)只是系統(tǒng)的環(huán)境變量變了,安裝的模塊還在,但是不在環(huán)境變量里,所以就找不到了,指定路徑的話還是有的

venv模塊

venv不用安裝,不過(guò)需要python3.3以上。進(jìn)入和退出該環(huán)境的方式和virtualenv一致。
看著似乎是同一個(gè)東西,python3.3版本之后,自帶了這個(gè)模塊,就不需要安裝了。
在當(dāng)前目錄下創(chuàng)建新的虛擬環(huán)境的命令:

> python -m venv <NAME>

我在 windows 平臺(tái)的習(xí)慣的做法:

  • 創(chuàng)建一個(gè)venv的文件夾,各種環(huán)境都放在venv文件夾下
  • venv文件夾和各個(gè)項(xiàng)目的文件夾屬于同一級(jí)目錄
  • 在venv文件夾內(nèi)執(zhí)行命令,創(chuàng)建新的虛擬環(huán)境
    • 資源管理器到vevn文件夾,上面路徑的地方輸入cmd,打開(kāi)cmd后,執(zhí)行創(chuàng)建虛擬環(huán)境的命令
  • 創(chuàng)建完成后,先更新一下pip

更新pip
在vevn目錄下的虛擬環(huán)境目錄下的Scripts目錄里,打開(kāi)cmd。直接在最上面的路徑框內(nèi)輸入cmd。
打開(kāi)cmd后,執(zhí)行如下2條語(yǔ)句的任意一條,就能完成pip的更新:

> easy_install-3.6.exe -U -i https://pypi.douban.com/simple/ pip
> python -m pip install --upgrade pip

不要直接通過(guò)pip命令來(lái)更新pip,否則pip會(huì)無(wú)法使用。
通過(guò)easy_install需要手動(dòng)指一下國(guó)內(nèi)的鏡像地址。
通過(guò)python調(diào)用pip來(lái)更新pip,會(huì)加載本地的pip的配置,如果有設(shè)置過(guò)鏡像源的話,就不需要再指了。如果沒(méi)有,也可以使用 -i 選項(xiàng)。

總結(jié)

virtualenv為應(yīng)用提供了隔離的Python運(yùn)行環(huán)境,解決了不同應(yīng)用間多版本的沖突問(wèn)題。
要?jiǎng)h除一個(gè)虛擬環(huán)境,只需刪除它的文件夾。(執(zhí)行 rm -rf venv )。

設(shè)置虛擬環(huán)境的本質(zhì)

其實(shí)就是在啟動(dòng)前,先設(shè)置環(huán)境變量。
每個(gè)虛擬環(huán)境里都有一個(gè)python的啟動(dòng)文件,把文件的路徑加到環(huán)境變量PATH的最前面。
這樣你在啟動(dòng)python的時(shí)候,找到的就是虛擬環(huán)境里的python文件。
如果把路徑切換到要執(zhí)行的python所在的目錄,則直接能在當(dāng)前目錄里找到啟動(dòng)文件,就不會(huì)再去根據(jù)PATH環(huán)境變量來(lái)查找命令所在位置了。

網(wǎng)頁(yè)名稱:Python多環(huán)境擴(kuò)展管理-Virtualenv
當(dāng)前網(wǎng)址:http://bm7419.com/article12/jddodc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站改版、企業(yè)網(wǎng)站制作建站公司、全網(wǎng)營(yíng)銷推廣、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司