Python多环境扩展管理-Virtualenv

栏目: Python · 发布时间: 6年前

内容简介:Python多环境管理工具,这两款可能都不错: Pyenv 和 Virtualenv 。Pyenv ,是对Python的版本进行管理,实现版本的切换。Virtualenv ,是通过创建虚拟环境,实现Python环境间的隔离,避免相互干扰。

Python多环境管理工具,这两款可能都不错: Pyenv 和 Virtualenv 。

Pyenv ,是对 Python 的版本进行管理,实现版本的切换。

Virtualenv ,是通过创建虚拟环境,实现Python环境间的隔离,避免相互干扰。

Virtualenv 部署

首先得先准备好Python和pip。Windows系统去官网下载安装后就都有了。

CentOS7安装python3可以看这篇: http://blog.51cto.com/steed/2288045

用pip安装Virtualenv

pip install virtualenv

安装过程:

$ pip 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 59kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0
$

使用方法

这段可以跳过,看下面的小节,直接干

命令使用格式如下:

virtualenv [选项] 目标目录

最基本的用法,创建虚拟目录就是这样:

virtualenv /opt/ansible/venv

上面的命令将会创建指定的文件夹,包含了Python可执行文件,以及 pip 库的一份拷贝。如果你的本地 pip 库已经装了别的模块了,那么新的虚拟环境也会包含这些模块。如果不想这样,就要加上一些参数选项。

下面列出了一些可用的选项:

  • --version :显示当前版本号
  • -h, --help :显示帮助信息
  • -v, --verbose :显示详细信息
  • -q, --quiet :不显示详细信息
  • -p PYTHON_EXE, --python=PYTHON_EXE :指定所用的python解析器的版本(下面会展开)
  • --clear :清空非root用户的安装,并从头开始创建隔离环境
  • --no-site-packages :令隔离环境不能访问系统全局的 site-packages 目录。 意思看不懂,下一节会用到
  • --system-site-packages :令隔离环境可以访问系统全局的 site-packages 目录
  • --unzip-setuptools :安装时解压 Setuptools 或 Distribute 。
  • --relocatable :重定位某个已经存在的隔离环境。使用该选项将修正脚本,并令所有.pth文件使用相应路径。
  • --distribute :使用 Distribute 代替 Setuotools ,也可设置环境变量 VIRTUALENV_DISTRIBUTE 达到同样效果。
  • --extra-search-dir=SEARCH_DIRS :用于查找 setuptools、distribute、pip 发布包的目录。可以加多个路径。
  • --never-download :禁止从网上下载任何数据。如果用上面的路径在本地搜索失败,会报错。
  • --prompt==PROMPT :定义隔离环境的命令行前缀。

用下面的命令,可以选择指定的Python解释器创建虚拟环境:

$ virtualenv -p /usr/bin/python2.7 venv

如果有多个Python解释器,比如在CentOS7上安装python3.6。默认的Python解释器不是要使用的,就要用 -p 参数设置一下了。

默认使用的解释器,可能是根据 pip 来决定的。我试的时候,CentOS默认有python2.7,我又安装了python3.6。使用python命令启动的是python2.7。但是python2.7没有安装 pip , pip 是安装在 python3.6 下的。启动 pip 用的是python3.6,如下:

$ pip -V
pip 18.1 from /usr/local/lib/python3.6/site-packages/pip-18.1-py3.6.egg/pip (python 3.6)

我实际安装虚拟环境的时候,没有用 -p 指定解释器,默认用的也是 python3.6 。

创建虚拟环境

创建工作目录:

$ mkdir /opt/ansible

在工作目录下,创建一个独立的虚拟环境,命名为venv:

$ cd /opt/ansible
$ virtualenv --no-site-packages venv
Using base prefix '/usr'
New python executable in /opt/ansible/venv/bin/python3.6
Also creating executable in /opt/ansible/venv/bin/python
Installing setuptools, pip, wheel...done.
$

命令virtualenv就可以创建一个独立的Python运行环境,我们还加上了参数--no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。

使用虚拟环境

使用source命令可以进入指定的虚拟环境,命令后面要跟虚拟环境目录下的 bin/activate 文件:

$ source /opt/ansible/venv/bin/activate
(venv) $

退出虚拟环境用Deactivate命令:

(venv) $ deactivate
$

这里都注意一下切换虚拟环境前后命令提示符的变化

测试

下面切换到虚拟环境下,安装个模块试下:

$ source /opt/ansible/venv/bin/activate
(venv) $ pip install ansible

""" 中间的安装日志就省略了 """

Successfully built ansible PyYAML MarkupSafe pycparser
Installing collected packages: MarkupSafe, jinja2, PyYAML, pycparser, cffi, six, pynacl, asn1crypto, idna, cryptography, bcrypt, pyasn1, paramiko, ansible
Successfully installed MarkupSafe-1.0 PyYAML-3.13 ansible-2.7.0 asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.5 cryptography-2.3.1 idna-2.7 jinja2-2.10 paramiko-2.4.2 pyasn1-0.4.4 pycparser-2.19 pynacl-1.3.0 six-1.11.0
(venv) $ ansible --version
ansible 2.7.0
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/ansible/venv/lib/python3.6/site-packages/ansible
  executable location = /opt/ansible/venv/bin/ansible
  python version = 3.6.6 (default, Aug 13 2018, 18:24:23) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
(venv) $ deactivate 
$ ansible --version
-bash: ansible: 未找到命令
$ /opt/ansible/venv/bin/ansible --version
ansible 2.7.0
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/ansible/venv/lib/python3.6/site-packages/ansible
  executable location = /opt/ansible/venv/bin/ansible
  python version = 3.6.6 (default, Aug 13 2018, 18:24:23) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
$

切换到虚拟环境下安装,安装完之后,可以使用安装的模块。

然后退出虚拟环境,再次尝试使用之前的模块,就提示找不到命令了。

其实只是系统的环境变量变了,安装的模块还在,但是不在环境变量里,所以就找不到了,指定路径的话还是有的

总结

virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。

要删除一个虚拟环境,只需删除它的文件夹。(执行 rm -rf venv )。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spark SQL内核剖析

Spark SQL内核剖析

朱锋、张韶全、黄明 / 电子工业出版社 / 2018-8 / 69.00元

Spark SQL 是 Spark 技术体系中较有影响力的应用(Killer application),也是 SQL-on-Hadoop 解决方案 中举足轻重的产品。《Spark SQL内核剖析》由 11 章构成,从源码层面深入介绍 Spark SQL 内部实现机制,以及在实际业务场 景中的开发实践,其中包括 SQL 编译实现、逻辑计划的生成与优化、物理计划的生成与优化、Aggregation 算......一起来看看 《Spark SQL内核剖析》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具