virtualenv、virtualenvwrapper创建虚拟环境与使用原理

发布时间 2023-04-04 18:38:55作者: hechengQAQ

摘要:virtualenv和virtualenvwrapper是创建和管理python虚拟环境的工具包,virtualenvwrapper是virtualenv的封装与扩展而来,方便创建、删除、切换虚拟环境

 

一、原理

macos ~/.bash_profile添加系统环境变量:

export WORKON_HOME=~/.virtualenvs

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3.10

source /Library/Frameworks/Python.framework/Versions/3.10/bin/virtualenvwrapper.sh

问题1:为什么要添加环境变量WORKON_HOME?

"""
virtualwrapper会将虚拟环境目录创建在环境变量WORKON_HOME指定的目录中。将所有的虚拟环境都放在同一目录中,方便管理
"""

问题2:为什么要添加环境变量VIRTUALENVWRAPPER_PYTHON?

"""
为了确保virtualenvwrapper使用我们想要的Python解释器,我们需要通过设置VIRTUALENVWRAPPER_PYTHON环境变量来指定Python解释器的路径。这样可以避免使用错误的Python解释器,从而保证虚拟环境的正常工作。


当然我们在创建虚拟环境时也可手动指定要用哪个版本的python解释器(mkvirtualenv -p python版本(可以是加载哪个版本的python别名) 虚拟环境名称)
"""

问题3:为什么要激活virtualenvwrapper.sh?

"""
首先回答什么是.sh文件,它是一种脚本文件,包含一系列命令,可以让操作系统执行。

显然virtualenvwrapper.sh包含了管理python虚拟环境的命令,如workon,mkvirtualenv等,所以我们要source激活,以便能够使用这些命令进行管理

注意点:
(1)当我重启shell终端后,workon,mkvirtualenv命令不能使用,系统无法找到此命令。因为重启后是一个新的shell进程,与上一个shell进程所做的事情无关,我们每次得手动激活,所以我们要在配置环境变量的文件中,实现永久激活。
(2)下载virtualwrapper工具包会在python的每个版本中自动创建virtualenvwrapper.sh的脚本文件
"""

mkvirtualenv执行原理:

"""
当执行mkvirtualenv指令时,virtualenvwrapper会做如下几件事情:

1.创建一个新的目录,用来存放新的虚拟环境(WORKON_HOME环境变量指定的目录下);
2.调用virtualenv创建一个新的Python环境(virtualenv会复制原始环境来创建新的环境,所以为了识别加载到这个原始环境,需要设置python环境变量,否则加载不到就会报错),这个环境会被放置在上述目录中;
3.启动一个新的shell,并将Python环境添加到该shell的环境变量中,使得该shell默认使用该虚拟环境。
"""

二、创建虚拟环境过程中报错

1.重启终端后-bash: mkvirtualenv: command not found

'""
原因:没有激活virtualenvwrapper.sh,可添加到环境变量的文件中设置永久激活
"""

2.mkvirtualenv创建虚拟环境时ERROR: virtualenvwrapper could not find virtualenv in your path

"""
原因:没有添加python环境变量,导致virtualenv在复制原有环境创建新的环境时,找不到原有环境的路径
"""/.bash_profile:
PATH="/Library/Frameworks/Python.framework/Versions/3.10/bin:${PATH}"
export PATH

三、实践(创建虚拟环境)

1、下载两个流行工具包

pip3 install virtualenv

pip3 install virtualenvwrapper

# 额外知识:命令行输入pip3下载时,通过PATH环境变量查找pip3可执行文件,在有同名命令时,找到的第一个执行。若系统中既有python3.6又有python3.10版本,哪个版本在前就使用哪个版本的pip3,当然我们可以使用别名alias区分

2、配置环境变量.bash_profile(macos)

# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
export PATH

# Setting PATH for Python 3.10
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.10/bin:${PATH}"
export PATH

# 存储所有虚拟环境目录
export WORKON_HOME=~/.virtualenvs
# 指定用哪个python解释器
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3.10
# 永久激活管理命令
source /Library/Frameworks/Python.framework/Versions/3.10/bin/virtualenvwrapper.sh

alias python3="/usr/local/bin/python3.10"

alias python36="/usr/local/bin/python3.6"

alias ll="ls -l"

3.即可使用