Python多环境扩展管理-Virtualenv

发布时间:2020-06-23 01:10:50 作者:骑士救兵
来源:网络 阅读:4208

Python多环境管理工具,这两款可能都不错: Pyenv 和 Virtualenv 。
Pyenv ,是对Python的版本进行管理,实现版本的切换。
Virtualenv ,是通过创建虚拟环境,实现Python环境间的隔离,避免相互干扰。
现在可以用python自带的venv模块,和Virtualenv似乎是一样的。不需要安装,直接就能通过python模块调用了。

Virtualenv 部署

现在已经不需要安装了,直接使用python的venv模块,直接就能创建虚拟环境目录。这段跳过。
首先得先准备好Python和pip。Windows系统去官网下载安装后就都有了。
CentOS7安装python3可以看这篇:https://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
$

使用方法

如果是使用python的venv模块,这段跳过。
这段可以跳过,看下面的小节,直接干
命令使用格式如下:

virtualenv [选项] 目标目录

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

virtualenv /opt/ansible/venv

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

用下面的命令,可以选择指定的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 。

创建虚拟环境

使用python的venv模块,直接调用模块创建虚拟环境。放在在后面,这段跳过。
创建工作目录:

$ 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运行环境。

使用虚拟环境

python的venv模块和这个似乎是一样的,用法也是一样的。所以使用的操作可以参考。
使用source命令可以进入指定的虚拟环境,命令后面要跟虚拟环境目录下的 bin/activate 文件:

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

退出虚拟环境用Deactivate命令:

(venv) $ deactivate
$ 

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

Windows平台
如果是Windows平台,则分别执行这2个bat文件:

> activate.bat
> deactivate.bat

测试

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

$ 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)]
$ 

切换到虚拟环境下安装,安装完之后,可以使用安装的模块。
然后退出虚拟环境,再次尝试使用之前的模块,就提示找不到命令了。
其实只是系统的环境变量变了,安装的模块还在,但是不在环境变量里,所以就找不到了,指定路径的话还是有的

venv模块

venv不用安装,不过需要python3.3以上。进入和退出该环境的方式和virtualenv一致。
看着似乎是同一个东西,python3.3版本之后,自带了这个模块,就不需要安装了。
在当前目录下创建新的虚拟环境的命令:

> python -m venv <NAME>

我在 windows 平台的习惯的做法:

更新pip
在vevn目录下的虚拟环境目录下的Scripts目录里,打开cmd。直接在最上面的路径框内输入cmd。
打开cmd后,执行如下2条语句的任意一条,就能完成pip的更新:

> easy_install-3.6.exe -U -i https://pypi.douban.com/simple/ pip
> python -m pip install --upgrade pip

不要直接通过pip命令来更新pip,否则pip会无法使用。
通过easy_install需要手动指一下国内的镜像地址。
通过python调用pip来更新pip,会加载本地的pip的配置,如果有设置过镜像源的话,就不需要再指了。如果没有,也可以使用 -i 选项。

总结

virtualenv为应用提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。
要删除一个虚拟环境,只需删除它的文件夹。(执行 rm -rf venv )。

设置虚拟环境的本质

其实就是在启动前,先设置环境变量。
每个虚拟环境里都有一个python的启动文件,把文件的路径加到环境变量PATH的最前面。
这样你在启动python的时候,找到的就是虚拟环境里的python文件。
如果把路径切换到要执行的python所在的目录,则直接能在当前目录里找到启动文件,就不会再去根据PATH环境变量来查找命令所在位置了。

推荐阅读:
  1. python 多环境扩展之virtualenv
  2. python virtualenv

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python virtualenv venv

上一篇:MySQL 储存引擎 MyISAM 和 InnoDB 配置

下一篇:SQLPS不同版本的差异

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》