Python虚拟环境的搭建与使用
前言
在开发中很多时候不同的项目会需要用的不同版本的包,甚至是不同版本的Python,而使用虚拟环境就可以轻松解决问题。虚拟环境通过创建一个全新的Python开发环境,从而实现不同项目间的隔离。
虚拟环境的搭建
virtualenvwrapper需要依赖virtualenv,所以先pip安装virtualenv,再pip安装virtualenvwrapper。virtualenvwrapper是基于virtualenv的扩展包,扩展包括创建和删除虚拟环境以及管理开发工作流的功能。
若是windows,使用pip install virtualenvwrapper-win,Linus使用pip install virtualenvwrapper
Linux下安装完后无法直接使用,会提示command not found。 使用前我们还需要修改环境配置文件,在.bashrc或.profile文件中加入三行代码:
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
参数说明:WORKON_HOME:表示存放虚拟环境的位置
PROJECT_HOME:表示项目工作目录的位置(使用mkproject命令时会用到)
source:待载入Shell文件的路径
source指向后缀为sh的脚本文件,在这里需要的是virtualenvwrapper.sh。同时要注意,不同系统中的路径可能不一样,find命令可以帮助我们找到需要的文件:
find / -name virtualenvwrapper.sh 上述命令表示在根目录下进行查找(即全盘查找)名为virtualenvwrapper.sh的文件,我查找的结果是/usr/bin/virtualenvwrapper.sh,所以source项可以填写这个:
find / -name virtualenvwrapper.sh
编辑完后执行 source ~/.bashrc 重新加载配置文件即可正常使用命令。顺带一提,配置文件重新加载后会自动创建.virtualenvs文件夹,却不会自动创建Devel文件夹,所以还是需要使用 mkdir $HOME/Devel 手动创建文件夹。 Win安装后需要设置环境变量,不过相比Linux下的设置相当的快捷。只需要创建两个环境变量: WORKON_HOME 和 PROJECT_HOME ,路径设定完成后就可以开始使用了。
虚拟环境的使用方法
这里仅重点介绍virtualenvwrapper的常用命令。
mkvirtualenv
在 WORKON_HOME 目录中创建一个新的虚拟环境。
mkvirtualenv [-a project_path] [-i package] [-r requirements_file] [virtualenv options] ENVNAME
参数说明: -i:指定一个或多个包 -a:指定一个项目目录,用于将该虚拟环境绑定至一个现有项目 -r:指定一个requirements文件,一般是由pip freeze所生成的,里面包括了需要用到的所有包 virtualenv options:参数将直接传递给virtualenv,详情参阅virtualenv官方文档 例如 mkvirtualenv env 会创建一个名为env的虚拟环境并激活,之后pip安装的所有包都仅仅存在于这个环境中。
mkproject
在 PROJECTHOME 目录中创建项目目录同时在 WORKON_HOME 目录下创建同名虚拟环境。
mkproject [-f | --force] [-t template] [virtualenv_options] ENVNAME
例如 mkproject env 会创建一个名为env的项目目录,同时被创建的还有它的同名虚拟环境,当前虚拟环境会被切换到新的虚拟环境,当前工作目录也会改变为新的项目目录。
setvirtualenvproject
将现有的虚拟环境绑定到现有的项目。
setvirtualenvproject [virtualenv_path project_path]
如果不指定参数,则默认为当前虚拟环境和当前目录作为参数,单个项目可以绑定多个虚拟环境,从而可以轻松地在不同的Python版本或依赖之间切换以进行测试。
rmvirtualenv
删除 WORKON_HOME 中的虚拟环境。
rmvirtualenv ENVNAME
例如 rmvirtualenv env 将会删除虚拟环境env。
workon
列出所有虚拟环境或更改当前工作中的虚拟环境。 workon [(-c|--cd)|(-n|--no-cd)] [environment_name|"."] 命令 workon 会列出所有可用的虚拟环境 命令 workon env 将会切换当前虚拟环境到虚拟环境env
deactivate
退出当前虚拟环境。
deactivate
其他命令
还有许多其他的命令,以下仅列出一部分: mktmpenv:创建一个临时的虚拟环境,停用后将会自动被清除 lsvirtualenv:列出所有可用环境 (showvirtualenv:显示单个虚拟环境的详细信息???) cdvirtualenv:将当前工作目录更改为虚拟环境的存放目录,可导航到子目录 cdproject:将当前工作目录更改为活动的虚拟环境所绑定的项目目录的目录 wipeenv:删除当前虚拟环境中所有已安装的第三方软件包
虚拟环境的使用实例
Python版本的的切换
假如我所使用的是Linux系统,自带Python2.7,许多软件包都会依赖老版本的Python,如果为了Python3.7覆盖原来的版本,那么很多软件可能会无法使用,这时可以通过参数-p来切换Python版本,-p后为指定的Python解释器:
mkvirtualenv -p /usr/local/python3.7/bin/python3 py3env1
这里我将Python3.7安装在了/usr/local/python3.7/目录下,根据不同的安装方式路径可能会有所不同。win7(64bit)下-p命令需要指定到python.exe 。
不同系统之间的项目转移
在虚拟环境中进行开发,最后使用
pip freeze > requirements.txt
将依赖包的信息进行保存,可以看到目录下会多出 requirements.txt 文件。将项目目录转移至目的系统后,重建并激活虚拟环境(Python版本需一致),在项目目录下执行命令
pip install -r requirements.txt
即可获得与之前开发时相同的依赖包和相同的环境。
一些疑问
其实我有个疑问,win版本和非win版本有什么区别,经过测试是都可以安装成功的(Windows),但是在仅安装virtualenvwrapper的情况下无法使用命令。在我卸载virtualenvwrapper-win的时候看到了些类似 workon.bat 的文件,推测win版本把命令用批处理实现了,相较而言Linux下的配置则要更为复杂。
---
---
虚拟环境的作用
在实际开发中,多个程序的运行可以能需要调试各种版本的不同环境,比如不同的python解释器,不同的flask版本
问题描述:如果直接进行多个版本安装,会导致后安装的内容覆盖先安装的.
解决办法:使用虚拟环境,不同的程序选择不同的环境,互不影响
搭建虚拟环境
查看当前电脑中是否有虚拟环境命令
virtualenv --version
安装虚拟环境的命令:
sudo pip install virtualenv
sudo pip install virtualenvwrapper
查看是否有mkvirtualenv创建虚拟环境指令
mkvirtualenv --version
安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量
# 创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs
# 打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
# 运行
source ~/.bashrc
创建虚拟环境的命令 : mkvirtualenv 虚拟环境名称(默认python2.x) 如:
mkvirtualenv py_flask
mkvirtualenv -p python3 虚拟环境名称(指定python3.x) 如:
mkvirtualenv -p python3 py3_flask
提示 :
创建虚拟环境需要联网
创建成功后, 会自动工作在这个虚拟环境上
工作在虚拟环境上, 提示符最前面会出现 “虚拟环境名称”
如何使用虚拟环境?
查看虚拟环境的命令: workon 两次tab键 或者 workon 回车
使用虚拟环境的命令: workon 虚拟环境名称 例 :workon py_flask 例 :workon py3_flask
退出虚拟环境的命令: deactivate
删除虚拟环境的命令(需要先退出): rmvirtualenv 虚拟环境名称 例 :删除虚拟环境py3_flask 先退出:deactivate 再删除:rmvirtualenv py3_flask
2.查看虚拟环境中安装的包 :
pip freeze
提示 : 工具包安装的位置 :
python2版本下:
~/.virtualenvs/py_flask/lib/python2.7/site-packages/
python3版本下:
~/.virtualenvs/py3_flask/lib/python3.5/site-packages