前言:一般情況下,為了方便管理,通常一個(gè)python項(xiàng)目搭配一個(gè)虛擬環(huán)境,對(duì)應(yīng)一個(gè)python版本。但是有時(shí)候,我們需要對(duì)項(xiàng)目的python版本升級(jí),框架版本升級(jí),這樣不可避免的就需要兩套環(huán)境,因?yàn)樯?jí)、修改、測(cè)試與現(xiàn)有系統(tǒng)的功能開發(fā)肯定是齊頭并進(jìn)的。那么隨意切換環(huán)境就很有必要了。
pipenv可以通過Pipfile文件方便的管理項(xiàng)目所需要的安裝包,但它只能為一個(gè)項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境。conda可以任意創(chuàng)建環(huán)境,但在項(xiàng)目包管理方面卻沒有那么方便。那如果將conda和pipenv結(jié)合起來,使用各自的優(yōu)勢(shì),那么就可以很方便地為一個(gè)項(xiàng)目創(chuàng)建多個(gè)環(huán)境了,可隨意切換,而不會(huì)出現(xiàn)覆蓋的情況。
1. 使用conda create 為項(xiàng)目創(chuàng)建不同python版本的環(huán)境
conda create -n env1_name python=3.6
conda create -n env2_name python=3.10
2.設(shè)置項(xiàng)目的虛擬環(huán)境目錄
cd proj_name
# 激活虛擬環(huán)境
conda activate env1_name
# 設(shè)置WORKON_HOME,將其設(shè)置成env1_name的虛擬目錄
conda env config vars set WORKON_HOME=/path/to/env1_name_virtual_path\
i.e:
conda env config vars set WORKON_HOME=/home/shelly/anaconda3/envs/env1_name
#設(shè)置完成之后,需要重新激活環(huán)境才生效
conda activate env1_name
3.設(shè)置PIPFILE(optional)
默認(rèn)是項(xiàng)目下的PIPFILE。如果要測(cè)試不同的python版本,然后里面的包的版本也各不相同,可以設(shè)置不同Pipfile文件。如果Pipfile不是在當(dāng)前項(xiàng)目的目錄下,設(shè)置到其它目錄,則pipenv的當(dāng)前目錄也會(huì)改變,變成Pipfile所在的目錄.
i.e: 比如之前是Python3.6,Django2.2,現(xiàn)在項(xiàng)目需要升級(jí)到Python3.10,Django3.2,為保證兩個(gè)版本在一段時(shí)間內(nèi)可以同時(shí)運(yùn)行??梢栽陧?xiàng)目下再創(chuàng)建一個(gè)Pipefile_3.10的文件,copyPipfile,改變一些pakg的版本。然後在另外一個(gè)虛擬環(huán)境中,將PIPEFILE的環(huán)境變量設(shè)置成Pipfile_3.10.這樣,在pipenv install的時(shí)候,它會(huì)重新生成Pipfile_3.10.lock的lockfile文件
conda env config vars set PIPENV_PIPFILE=/mnt/d/H.H/private_code/envtest/Pipfile
設(shè)置完環(huán)境變量后,記得需要重新激活環(huán)境生效:conda activate venv_name
4、在虛擬環(huán)境下安裝pipenv
conda install pipenv
5.再env1_name虛擬環(huán)境下,創(chuàng)建pipenv的虛擬環(huán)境
pipenv install --python /home/shelly/anaconda3/envs/v2_env/bin/python
在使用pipenv install 之前,可以使用pipenv --venv確認(rèn)一下虛擬環(huán)境,如果沒設(shè)置,確認(rèn)一下WORKON_HOME環(huán)境變量。使用--python指定python解釋器。
不要用sudo,sudo會(huì)使虛擬路徑又變到系統(tǒng)的虛擬路徑去
6.進(jìn)入虛擬環(huán)境
先確保已激活conda的虛擬環(huán)境
然後在conda的虛擬環(huán)境下,使用pipenv shell 進(jìn)入pipenv的虛擬環(huán)境
pipenv shell