Python虚拟环境配置

一、为什么安装python虚拟环境
参考此文内容:virtualenv介绍及基本使用
为了更详细多种使用场景说明,下面摘自各方补充说明:

1.如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要2.7,而应用B需要2.6怎么办?这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。
2.virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。它是Python解释器的一个私有副本,在这个环境中可以安装私有包,而不会影响到系统中安装的全局Python解释器。
3.当一台主机上运行着多个Python应用时,使用虚拟环境可以有效的避免包的混乱和版本的冲突。

二、在mac安装虚拟环境
1、安装virtualenv

$ pip3 install virtualenv
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
    100% |████████████████████████████████| 1.9MB 136kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0

测试安装是否成功:

$ virtualenv --version
16.0.0

三、虚拟环境使用
1、创建虚拟环境

$ mkdir ~/python/tutorial/py_envs #在项目目录下创建了一个统一管理虚拟环境的目录
$ cd ~/python/tutorial/py_envs #进入这个目录
~/python/tutorial/py_envs $ virtualenv --no-site-packages venv#参数no-site-packages作用是已经安装到系统Python环境中的所有第三方包都不会复制过来,这样就得到一个不带任何第三方包的“干净”的Python运行环境。
Using base prefix '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/macbook/Python/tutorial/py_envs/venv/bin/python3.6
Also creating executable in /Users/macbook/Python/tutorial/py_envs/venv/bin/python
Installing setuptools, pip, wheel...done.

virtualenv命令参数说明如下:
virtualenv [OPTIONS] DEST_DIR
选项:
–version :显示当前版本号。
-h, –help :显示帮助信息。
-v, –verbose :显示详细信息。
-q, –quiet :不显示详细信息。
-p PYTHON_EXE, –python=PYTHON_EXE:指定所用的python解析器的版本,比如 –python=python3.5 就使用3.5版本的解析器创建新的隔离环境。 默认使用的是当前系统安装(/usr/bin/python)的python解析器 。
使用-p PYTHON_EXE选项在创建虚拟环境的时候指定python版本操作如下:

$ virtualenv -p /usr/bin/python2.7 venv2.7
$ virtualenv -p /usr/local/bin/python3.6 venv3.6

–clear :清空非root用户的安装,并重头开始创建隔离环境。
–no-site-packages :令隔离环境不能访问系统全局的site-packages目录。
–system-site-packages :令隔离环境可以访问系统全局的site-packages目录。 作用说明:默认情况下,虚拟环境中不会包含也无法使用系统环境的global site-packages,比如系统环境里安装了 requests 模块,在虚拟环境里import requests会提示ImportError。如果想使用系统环境的第三方软件包,可以在创建虚拟环境时使用参数–system-site-packages。
–unzip-setuptools :安装时解压Setuptools或Distribute 。
–relocatable :生成可打包环境,重定位某个已存在的隔离环境。某些特殊需求下,可能没有网络, 我们期望直接打包一个venv 可以解压后直接使用, 这时候可以使用virtualenv -relocatable指令将venv修改为可更改位置的venv。

–distribute :使用Distribute代替Setuptools,也可设置环境变量VIRTUALENV_DISTRIBUTE达到同样效要。
–extra-search-dir=SEARCH_DIRS :用于查找setuptools/distribute/pip发布包的目录。可以添加任意数量的–extra-search-dir路径。
–never-download :禁止从网上下载任何数据。此时,如果在本地搜索发布包失败,virtualenv就会报错。
–prompt==PROMPT :定义隔离环境的命令行前缀。
2、激活环境

 ~/python/tutorial/py_envs $ source venv/bin/activate
(venv) ~/python/tutorial/py_envs$

可看到命令提示符变了,有个(venv)前缀,表示当前环境是一个名为venv的Python环境。
在venv环境下,用pip3安装的包都被安装到venv这个环境下,原有系统Python环境不受任何影响。也就是说,venv环境是专门针对py_envs这个应用创建的。
3、退出环境&删除环境

~/python/tutorial/py_envs $ deactivate
~/python/tutorial/py_envs $

下发去激活命令后退出当前的venv环境,此时就回到了正常的环境,现在pip3或python均是在系统Python环境下执行。
rmvirtualenv 环境名:即可删除环境,但需要在退出环境之后才能操作成功。
四、安装虚拟环境管理包
virtualenvwrapper是对virtualenv的扩展,更方便新增、复制、删除、切换虚拟环境。
1、安装virtualenvwrapper

$ pip3 install virtualenvwrapper
Collecting virtualenvwrapper
  Downloading https://files.pythonhosted.org/packages/2b/8c/3192e10913ad945c0f0fcb17e9b2679434a28ad58ee31ce0104cba3b1154/virtualenvwrapper-4.8.2-py2.py3-none-any.whl
Collecting stevedore (from virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/a1/d9/93a975469c53a9ee85de9ec0deb12345aa777748b4c263860668592344fe/stevedore-1.29.0-py2.py3-none-any.whl
Requirement already satisfied: virtualenv in /usr/local/lib/python3.6/site-packages (from virtualenvwrapper) (16.0.0)
Collecting virtualenv-clone (from virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/6d/c2/dccb5ccf599e0c5d1eea6acbd058af7a71384f9740179db67a9182a24798/virtualenv_clone-0.3.0-py2.py3-none-any.whl
Collecting pbr!=2.1.0,>=2.0.0 (from stevedore->virtualenvwrapper)
  Downloading https://files.pythonhosted.org/packages/69/1c/98cba002ed975a91a0294863d9c774cc0ebe38e05bbb65e83314550b1677/pbr-4.2.0-py2.py3-none-any.whl (100kB)
    100% |████████████████████████████████| 102kB 20kB/s
Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/site-packages (from stevedore->virtualenvwrapper) (1.11.0)
Installing collected packages: pbr, stevedore, virtualenv-clone, virtualenvwrapper
Successfully installed pbr-4.2.0 stevedore-1.29.0 virtualenv-clone-0.3.0 virtualenvwrapper-4.8.2

2、配置virtualenvwrapper.sh运行环境
建立一个文件包含所有虚拟环境

$ mkdir $HOME/.virtualenvs

找到virtualenvwrapper.sh路径

 ~/python/tutorial/py_envs$  sudo find / -name virtualenvwrapper.sh
Password:
/usr/local/bin/virtualenvwrapper.sh

打开.bashrc文件,并添加下面内容

$ open ~/.bashrc
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then

       export WORKON_HOME=$HOME/.virtualenvs 

       export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3

       source /usr/local/bin/virtualenvwrapper.sh
fi

激活.bashrc文件

$ source ~/.bashrc
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/get_env_details

3、用virtualenvwrapper创建虚拟环境工作空间
创建一个python3开发环境

$ mkvirtualenv --python=/usr/local/bin/python3 myenv
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/macbook/.virtualenvs/myenv/bin/python3.6
Also creating executable in /Users/macbook/.virtualenvs/myenv/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/myenv/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/myenv/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/myenv/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/myenv/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/macbook/.virtualenvs/myenv/bin/get_env_details

相关命令功能如下:
lsvirtualenv -b :列出虚拟环境
workon [虚拟环境名称] : 切换虚拟环境
lssitepackages : 查看环境里安装了哪些包
cdvirtualenv [子目录名] :进入当前环境的目录
cpvirtualenv [source] [dest] : 复制虚拟环境
deactivate :退出虚拟环境
rmvirtualenv [虚拟环境名称]: 删除虚拟环境

virtualenvwrapper安装过程中在配置.bashrc文件时没有加上此条:export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3,就会出现source命令失败,错误显示如下:

~/python/tutorial/py_envs $  source ~/.bashrc
/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.

If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.

错误原因是:mac安装了2.7和3.6两个版本的python,在安装时使用的是pip3 install virtualenvwrapper,但virtualenvwrapper在运行的时候默认使用的是python2.7,但在python2.7中不存在对应的模块。
当不存在VIRTUALENVWRAPPER_PYTHON环境时,会默认选择使用which python(mac默认是python2),所以需要在.bashrc文件增加此环境变量:

export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3

Mac中Python路径相关:
1.Mac系统自带的python环境在:
Python 2.7.10:/System/Library/Frameworks/Python.framework/Version/2.7
其中,解释器在该目录下的 /usr/bin/python2.7
Python 2.6.9:/System/Library/Frameworks/Python.framework/Version/2.6
其中,解释器在该目录下的 /usr/bin/python2.6
2.用户安装的python环境默认环境在:
python 3.6.5:/Library/Frameworks/Python.framework/Version/3.6
其中,解释器在该目录下的 /usr/local/bin/python3.6
python 2.7.7:/Library/Frameworks/Python.framework/Version/2.7
其中,解释器在该目录下的 /usr/local/bin/python2.7
3.homebrew安装的python环境默认环境在:
/usr/local/Cellar/python3/3.6.5/bin
其中,解释器在该目录下的 /usr/local/bin/python3.6
pip3所在位置
/usr/local/Cellar/python3/3.6.5/bin/pip3

推荐阅读更多精彩内容