前言:一般情况下,为了方便管理,通常一个python项目搭配一个虚拟环境,对应一个python版本。但是有时候,我们需要对项目的python版本升级,框架版本升级,这样不可避免的就需要两套环境,因为升级、修改、测试与现有系统的功能开发肯定是齐头并进的。那么随意切换环境就很有必要了。
pipenv可以通过Pipfile文件方便的管理项目所需要的安装包,但它只能为一个项目创建一个虚拟环境。conda可以任意创建环境,但在项目包管理方面却没有那么方便。那如果将conda和pipenv结合起来,使用各自的优势,那么就可以很方便地为一个项目创建多个环境了,可随意切换,而不会出现覆盖的情况。
1. 使用conda create 为项目创建不同python版本的环境
conda create -n env1_name python=3.6
conda create -n env2_name python=3.10
2.设置项目的虚拟环境目录
cd proj_name
# 激活虚拟环境
conda activate env1_name
# 设置WORKON_HOME,将其设置成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
#设置完成之后,需要重新激活环境才生效
conda activate env1_name
3.设置PIPFILE(optional)
默认是项目下的PIPFILE。如果要测试不同的python版本,然后里面的包的版本也各不相同,可以设置不同Pipfile文件。如果Pipfile不是在当前项目的目录下,设置到其它目录,则pipenv的当前目录也会改变,变成Pipfile所在的目录.
i.e: 比如之前是Python3.6,Django2.2,現在項目需要升級到Python3.10,Django3.2,為保證兩個版本在一段時間内可以同時運行。可以在項目下再創建一個Pipefile_3.10的文件,copyPipfile,改變一些pakg的版本。然後在另外一個虛擬環境中,將PIPEFILE的環境變量設置成Pipfile_3.10.這樣,在pipenv install的時候,它會重新生成Pipfile_3.10.lock的lockfile文件
conda env config vars set PIPENV_PIPFILE=/mnt/d/H.H/private_code/envtest/Pipfile
设置完环境变量后,记得需要重新激活环境生效:conda activate venv_name
4、在虛擬環境下安裝pipenv
conda install pipenv
5.再env1_name虚拟环境下,创建pipenv的虚拟环境
pipenv install --python /home/shelly/anaconda3/envs/v2_env/bin/python
在使用pipenv install 之前,可以使用pipenv --venv确认一下虚拟环境,如果没设置,确认一下WORKON_HOME环境变量。使用--python指定python解释器。
不要用sudo,sudo会使虚拟路径又变到系统的虚拟路径去
6.進入虛擬環境
先確保已激活conda的虛擬環境
然後在conda的虛擬環境下,使用pipenv shell 進入pipenv的虛擬環境
pipenv shell