内容简介: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 )。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 混合云环境中扩展Kubernetes的挑战及方案
- 【php 扩展开发】扩展生成器
- 喧喧发布 1.6.0 版本,扩展机制增强,支持服务器扩展
- 为vscode编写扩展
- JavaScript——DOM扩展
- Mac内核扩展开发
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入Linux内核架构
Wolfgang Mauerer / 郭旭 / 人民邮电出版社 / 201005 / 149.00元
众所周知,Linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。本书结合内核版本2.6.24源代码中最关键的部分,深入讨论Linux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等方面的内容。本书引导你阅读内核源代码,熟悉Linux所有的内在工作机理,充分展现Linux系统的魅力。 ......一起来看看 《深入Linux内核架构》 这本书的介绍吧!