一、什么是虚拟环境?
Python 虚拟环境的主要目的是为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个工程都有自己的依赖包,而与其它的工程无关。不同的虚拟环境中同一个包可以有不同的版本。并且,虚拟环境的数量没有限制,我们可以轻松地用 virtualenv 或者 pyenv 等工具来创建多个虚拟环境。
Python 中有 virtualenv 和 py venv 虚拟环境,简单使用的话 Python 自带的虚拟环境也是挺好的,自带虚拟环境不需要安装。
二、虚拟环境是如何工作的?
在激活虚拟环境后,python 可执行文件的路径变成了当前环境目录下的路径,并且 $PATH
也发生了变化:
$ echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:
$ source env/bin/activate(env)
$ echo $PATH/Users/michaelherman/python-virtual-environments/env/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:
虚拟环境下的bin目录排在了 $PATH
的最前面。这意味着,用户在命令行中执行 python 的时候,将率先使用虚拟环境下的可执行文件,而不是系统默认的。
虚拟环境下的 python 可执行文件与系统默认的有什么不同呢?
事实上,上面提到的 python 可执行文件之间并没有什么不同,但是它们所在的位置至关重要。在Python 启动的时候,它会获取自身所在的路径。然后这一路径(bin的上一级)被设置到 sys.prefix
和 sys.exec_prefix
之中。在搜索第三方的 site-packages
时,搜索目录是 sys.prefix
所指向的路径下的 lib/pythonX.X/site-packages/
,其中 X.X
是 Python 的版本。
Python 是如何找到虚拟环境下的第三方库的呢?
在前面的例子中,python 文件所在路径为 /Users/michaelherman/python-virtual-environments/env/bin
,因此 sys.prefix
会被设为 /Users/michaelherman/python-virtual-environments/env
,从而 site-packages
的路径就变成了 /Users/michaelherman/python-virtual-environments/env/lib/pythonX.X/site-packages
。最后,这一路径被存储在 sys.path
数组中,其中包含着所有包的引用来源。
三、虚拟环境的安装使用
py venv 虚拟环境使用
-
创建虚拟环境
命令格式:python -m venv 虚拟环境名称
进入对应目录后运行:python -m venv .venv
虚拟环境就安装到当前目录下的 .venv 目录下了。
-
进入虚拟环境
.venv\scripts\activate.bat // Windows 下 source .venv/bin/activate // Linux 下
-
退出虚拟环境
deactivate
-
虚拟环境中安装库
刚创建的虚拟环境是干净的,需要自己安装需要的第三方库。如安装PyQt5:pip install PyQt5
虚拟环境是独立的,在进入虚拟环境后可用
pip freeze
查看当前环境中安装了那些第三方库。
virtualenv 虚拟环境使用
- 安装 virtualenv
pip install virtualenv
-
创建虚拟环境
命令格式:virtualenv 虚拟环境名称
进入对应目录后运行:virtualenv .venv
虚拟环境就安装到当前目录下的 .venv 目录下了。
-
进入虚拟环境
.venv\scripts\activate.bat // Windows 下 source .venv/bin/activate // Linux 下
-
退出虚拟环境
deactivate
-
虚拟环境中安装库
刚创建的虚拟环境是干净的,需要自己安装需要的第三方库。如安装PyQt5:pip install PyQt5
虚拟环境是独立的,在进入虚拟环境后可用
pip freeze
查看当前环境中安装了那些第三方库。
四、管理虚拟环境
通过以上方式即可创建一个虚拟环境,但是这种方式需要记住每一个虚拟环境的目录显得太麻烦,虚拟环境可以通过一些工具来管理,从而使用起来更加方便,这里推荐 virtualenvwrapper
- 安装 virtualenvwrapper
pip install virtualenvwrapper-win // Windows 下 pip install virtualenvwrapper // Linux 下
- 输入
workon
命令查看是否可用// 输出结果如下表示成功 Pass a name to activate one of the following virtualenvs: ============================================================================== 找不到文件
-
使用 virtualenvwrapper 创建虚拟环境
命令格式:mkvirtualenv 虚拟环境名称
mkvirtualenv testenv
注:Windows 下虚拟环境默认放在
C:\Users\Administrator\Envs
目录中。 -
删除虚拟环境
命令格式:rmvirtualenv 虚拟环境名称
rmvirtualenv testenv
- 进入虚拟环境
命令格式:workon 虚拟环境名称
workon testenv
- 退出虚拟环境
deactivate
- 常用命令列表
# 列举所有的虚拟环境 lsvirtualenv # 显示所有的虚拟环境包 lssitepackages # 导航到当前激活的虚拟环境的目录中,比如说这样就能够浏览它的 site-packages cdvirtualenv # 和上面的类似,但是是直接进入到 site-packages 目录中 cdsitepackages # 这会在 ~/Envs 中创建 my_django115 文件夹 mkvirtualenv my_django115 # 启动/切换虚拟环境 workon my_django115 # 退出虚拟环境 deactivate # 删除虚拟环境 rmvirtualenv my_django115
-
修改虚拟环境默认存放路径
Windows 下:
找到系统环境变量,添加变量名为WORKON_HOME
值为指定路径即可。如图(Win):
Linux下:
设置 linux 的用户个人配置文件~/.bashrc
添加如下内容:WORKON_HOME=~/Envs #设置virtualenv的目录,以后自动下载的虚拟环境全都放这里 VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenvwrapper的参数,生成干净隔绝的环境 VIRTUALENVWRAPPER_PYTHON=/opt/python/bin/python3 #指定python解释器的本体(路径为python3安装的目录) source /opt/python/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本(路径需要根据自己的安装位置进行配置)
配置完成后重新登录配置生效。
如图(图片来源于互联网):
参考文章:
1.python虚拟环境的安装和配置-virtualenv,virtualenvwrapper_Mrical的博客-CSDN博客
2.Linux下的快速配置虚拟环境virtualenvwrapper - 柳帅 - 博客园