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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容