一、为什么要使用virtualenv
在python的实际开发过程中,会遇到python多版本共存的情况,当前常用的python版本有2.6、2.7以及经过重新设计的3.0+。在实际项目的开发过程中,这些版本都有可能采用,所以python多版本共存开发需要进行妥善处理。因此我们在linux服务器中需要安装多个版本的python环境,进行开发测试。在服务器中安装多个版本的python环境,需要进行细致的管理协调,尤其是python是服务器扩展工具的重要组成部分,一旦配置不当,就能影响其他linux服务器工具的使用,例如:在redhat6.0+中,默认预装的python版本是2.6,所以常用的yum工具依赖的python版本就是2.6;如果由于项目的需要,系统安装了python2.7并修改了/usr/bin/python的连接指向,这样就会导致yum工具的使用,所以在修改原有的系统连接的时候,要特别当心。
在这里为了解决这个问题,我给出的建议是,不要修改系统原有的连接,而是在/usr/local/bin中添加新的异步链接。例如,在项目的实践过程中,应用到了python2.6、python2.7,所以服务器中同时存在着两个版本。并且python2.6是系统已经预装的,python2.7是项目需要,后来手动安装,并且安装目录为/usr/local/python2.7中。这时,如果直接运行python指令,其实运行的是python2.6版本,通过which python指令,我们可以检测到,直接运行python指令,系统默认检测到的python指令路径为/usr/bin/python,这个是系统预装python的指令路径也就是python2.6。在应用过程中,为了方便使用,可以在/usr/local/bin中添加python2.7的异步链接,通过ln -s 【源文件】 【目标文件】添加,添加完成后,可以如下:/usr/local/bin/python2.7。这样我们执行python2.7指令的时候,就是运行的python2.7版本了。(有人可能会问,如果在/usr/local/bin中添加的连接也是python,即/usr/local/bin/python。那执行python指令,到底是执行的那个版本?这涉及到linux指令检测先后顺序问题。在linux中检测到指令后,系统就会停止向后检测,而且检测的先后顺序是按照PATH路径中,设置的检测路径先后顺序)
在项目中实际执行python脚本的时候,建议采用明确版本的方式执行。例如,要采用python2.6运行脚本,则采用python2.6 【目标文件】;要采用python2.7运行脚本,则采用python2.7 【目标文件】。这样做,可以更加明确,使后来开发人员也能在第一时间了解项目所依赖的python版本。
讲了这么多,大家是不是误认为virtualenv是解决多版本并存问题的。很遗憾的告诉大家,这个并不能解决这个问题,上面给出的解决方案才是解决多版本并发问题的关键。
那virtualenv为什么还会出现呢?
因为项目实践过程中,会遇到不同的项目会依赖某一版本的python,但是他们所依赖的python扩展库也不相同。python的扩展库非常丰富,而且也存在多个版本的扩展库都在维护使用的情况。这时,不能在python的扩展库中都安装上这些lib。如果全部安装,会导致lib的版本冲突问题。而且,一般情况下每一个项目所依赖的lib库是有限的几个,如果全部安装,也导致python扩展的疯狂扩张。
这时virtualenv就可以大显身手。virtualenv也是python的一个扩展应用,需要依赖于某一版本的python,并且在使用过程中,virtualenv创建的虚拟环境,就是导入的virtualenv安装过程中依赖的python版本。通过virtualenv可以创建多个相互隔离的python虚拟环境,在这些虚拟环境中,就可以运行不同的项目,并且项目之间不会互相干扰。
下面让我们详细的了解一下virtualenv的功能和原理。
二、virtualenv简介
在实际的开发当中,我们需要解决一些问题,最重要的一点就是开发和运行环境的隔离和低权限。
所谓环境的隔离,是指在同一台机器上,能够并行(side-by-side)地部署多个python环境,每个环境之间互相独立,拥有自己的python程序,库和可执行程序。这样,我们既可以在一台机器上为多名开发者提供互不影响的开发环境,也能在同一台服务器上为多个应用提供互不影响的执行环境。同时,为了能够让多名开发者或多个应用实现真正意义上的隔离,还需要让每个环境能够在各自的非root且不能sudo的用户手里进行管理,包括升级包,安装新的包等等,否则需要为每个人都提供sudo权限,会破坏隔离性。
一个直接的解决方案是在机器上安装为每个人安装一个python,彼此在不同的目录当中,每个目录只授权给对应的人员权限。但这种方案会导致大量的冗余的文件,比如python的标准库,就需要每个安装的目录里面一份。而且如果我们需要做小版本升级(比如将 python 2.7.2 升级到 python 2.7.3)的时候,需要对每个目录重新执行一次install操作。
这时virtualenv就可以提供很好的解决方案。 virtualenv 官网(http://virtualenv.org/) 描述如下:
virtualenv 是一个创建隔离的Python环境的工具。
virtualenv要解决的根本问题是库的版本和依赖,以及权限问题。假设你有一个程序,需要LibFoo的版本1,而另一个程序需要版本2,如何同时使用两个应用程序呢?如果将所有的库都安装在 /usr/lib/python2.7/site-packages(或者你的系统的标准包安装路径),非常容易出现将不该升级的库升级的问题。
另外,在一台共享的机器上,如果没有全局的 site-packages 目录的权限(例如一个共享的主机),如何安装Python库呢?在这些情况下,就是该用到virtualenv的地方。它能够创建一个自己的安装目录,形成一个独立的环境,不会影响其他的virtualenv环境,甚至可以不受全局的site-packages当中安装的包的影响。
总结起来,virtualenv的有点如下:
- virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响。
- 在没有权限的情况下安装新套件
- 不同应用可以使用不同的套件版本
- 套件升级不影响其他应用
三、virtualenv安装配置
在系统中,安装完成python环境后,建议给python安装两个扩展插件,分别是setuptools和pip。这两个插件对于python安装扩展库有很大的帮助。并且安装完成后,我们就可以采用pip install virtualenv的方式安装virtualenv了。就我的实际应用为例,讲解virtualenv的安装配置。
①安装python2.7环境。
②下载setuptools(https://pypi.python.org/pypi/setuptools),并且解压安装。
python2.7 setup.py install。
注意:在我的实践过程中,我刚开始采用的是2.0.2版本的,但是完成virtualenv后创建虚拟环境的过程中,一直报错,所以重新配置环境,将setuptools版本降回到2.0.1.这样就解决了那个问题。
③安装pip扩展。安装完成setuptools后,我们就可以采用easy_install指令安装python扩展了。注意easy_install指令应该在你python安装目录的bin文件下,例如:/usr/local/python2.7/bin/easy_install。采用easy_install安装pip扩展:easy_install pip。运行完成指令后,就会给python安装pip扩展了。pip扩展安装完成后,我们就可以采用pip install安装python的扩展工具。
④安装virtualenv。pip安装完成后,也是在python的安装目录bin下。安装virtualenv需要执行如下指令:pip install virtualenv。这样就可以给python安装上virtualenv扩展插件了。
⑤创建虚拟环境。virtualenv安装完成后,virtualenv的指令也存在于python安装目录bin下。采用virtualenv指令创建虚拟环境如下:
virtualenv /env/test。执行完成该指令后,就可以创建一个test虚拟环境,这个虚拟环境与我们的系统环境隔离。我们可以在这个虚拟环境中安装我们所需要的套件。并且虚拟环境中自在easy_install和pip指令,方便虚拟环境套件的安装。
四、virtualenv使用
①常见完虚拟环境后,激活虚拟环境。
安装完python的虚拟环境以后,需要激活虚拟环境才能正常进行工作,激活指令的方法为:
进入到虚拟环境中:cd /env/test。
通过查看,我们可以发现,存在三个文件夹,分别是bin、include、lib。
其中bin中是python的指令及扩展指令目录。include是python的系统目录包。lib中主要是python的扩展指令包。
计入到bin目录中,执行:source activate。就激活了该虚拟环境了。
②如何从激活的虚拟环境中退出。
退出虚拟环境的指令是:deactivate
③安装额外的工具:virtualenvwrapper:pip install virtualenvwrapper
安装完成以后,还需要在你的home目录下的.bashrc中添加以下内容:
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python2.7/bin/python--python的路径
export WORKON_HOME=/env--虚拟环境的工作目录
source /usr/local/python2.7/bin/virtualenvwrapper.sh--编译虚拟环境。
如果你安装的过程中,不是标准安装,还需要添加异步链接:
ln -s /usr/local/python2.7/bin/virtualenv /usr/local/bin/virtualenv
添加异步链接,是virtualenvwrappper指令中所需要的。
设置好以后,重新编译$HOME/.bashrc:source .bashrc。编译完成后,就可以采用以下指令了:
列出已经创建的虚拟环境:workon或者lsvirtualenv
创建并进入环境:mkvirtualenv test1
退出环境:deactivate
进入已存在的环境或者切换环境:workon test1或者test2
删除环境: rmvirtualenv test1
五、虚拟环境在工程中与shell脚本集成应用
在这部分中,根据项目实践,讲解一下虚拟环境和shell脚本结合实际运行python脚本的方法,这里先给你一个脚本,查看如何在工程中采用虚拟环境执行python脚本。
#!/bin/bash set -e cd `dirname $0` source /env/test/bin/activate python 【目标文件】
相关推荐
在本项目中,我们将探讨如何使用Python环境搭建一个与Argo-xray节点集成的系统,以便实现文件的输出、订阅功能以及项目的通用性。首先,让我们深入了解一下Argo-xray和Python环境的基础知识。 Argo-xray是一款强大...
虚拟环境(Virtualenv)是Python开发中的最佳实践,它能隔离项目之间的依赖。安装虚拟环境管理器virtualenv和virtualenvwrapper: ``` pip3 install virtualenv pip3 install virtualenvwrapper ``` 配置`~/....
本教程将详述如何在你的计算机上搭建Python环境,并配置强大的集成开发环境(IDE)PyCharm,以便更高效地进行Python编程。 首先,我们需要安装Python解释器。Python的最新稳定版本通常可以从其官方网站python.org...
为了确保pip安装的包与系统Python环境隔离,可以创建一个虚拟环境。首先,安装virtualenv: ```bash sudo pip3 install virtualenv ``` 然后,创建一个新的虚拟环境: ```bash virtualenv -p /usr/bin/python3 ...
创建一个名为`.virtualenv`的目录,进入该目录并使用`virtualenv django-p /usr/bin/python`创建虚拟环境,其中`django-p`是虚拟环境的名称,`/usr/bin/python`指定了使用的Python版本。 **12. 激活并退出虚拟环境...
Python 的虚拟环境工具如`venv`或`virtualenv`,用于创建隔离的Python环境,避免不同项目间的依赖冲突。通过`python -m venv myenv`或`virtualenv myenv`命令,可以在当前目录下创建名为`myenv`的虚拟环境,激活后...
- 使用`venv`或`virtualenv`模块创建隔离的Python环境,避免项目之间依赖冲突。在命令行中,可以使用`python -m venv myenv`创建一个名为myenv的虚拟环境。 - 激活虚拟环境,例如对于PowerShell,使用`. .\myenv\...
在本教程中,我们将详细介绍如何在CentOS上使用`virtualenv`搭建Python 3开发环境。 首先,由于CentOS 6.5默认预装的是Python 2.6.6,而我们需要Python 3环境,所以我们需要手动安装Python 3。下载Python 3.4.3的...
2. 创建虚拟环境:为了保持项目依赖的隔离,通常建议使用venv或virtualenv创建一个新的Python环境。 3. 安装必要的库:如果项目依赖于特定的Python库,如`socket`之外的其他网络通信库,需要在虚拟环境中使用`pip ...
### Windows上使用virtualenv搭建Python+Flask开发环境 在现代软件开发中,尤其是在Web开发领域,维护一个清晰且无干扰的开发环境至关重要。对于Python开发者来说,这意味着必须有效地管理和隔离项目之间的依赖关系...
小朋友你可能有很多问号~,上一小节不是已经一顿操作猛如虎搭建好 Python + PyCharm 可用开发环境了吗?为什么这节又来个项目运行环境?作者你是不是想搞事情… Virtualenv 简介 淡定,事情是这样(试图狡辩): ...
4. **创建虚拟环境**:为了保持系统环境的整洁,建议使用`virtualenv`或`venv`创建一个隔离的Python环境。在新环境中安装Python和所需的库。 5. **安装第三方库**:如果你的应用需要特定的Python库,需要先在联网...
Python搭建的Web服务是一种常见的技术实践,特别是在快速原型开发、小型项目或教学环境中。Web.py是其中的一个轻量级框架,它提供了简洁的语法和强大的功能,使得开发者能够快速构建Web应用。本篇文章将深入探讨...
4. **虚拟环境**:为了保持环境隔离和避免版本冲突,开发人员常使用虚拟环境,如Python的virtualenv或venv、Node.js的nvm或npx。虚拟环境允许为每个项目创建独立的运行环境。 5. **构建工具**:一些项目可能需要...
python3虚拟环境的概述以及搭建1 概述2 优点3 window系统下安装方法以及步骤3.1 方法3.1.1 分步法3.1.2 一步到位法4 总结5 参考 1 概述 python3.3以上的版本通过venv原生模块支持虚拟环境,可以代替Python之前的...
虚拟环境是Python的一个重要特性,它允许用户在同一台机器上为不同的项目创建隔离的运行环境,从而避免了项目间的依赖冲突。接下来将详细介绍在Windows和MacOS/Linux平台下使用Python3搭建虚拟开发环境的步骤。 ...
接着,安装Python相关的组件,包括`python-setuptools`、`python-pip`以及`python-virtualenv`,这有助于管理Python依赖和创建隔离的开发环境: ```bash sudo yum install python-setuptools sudo yum install ...
`venv`是Python 3内建的虚拟环境模块,`virtualenv`则是更早的第三方工具,两者都能创建独立的Python运行环境: ```bash # 使用venv python3 -m venv myenv source myenv/bin/activate # 使用virtualenv(需先安装...
9. **虚拟环境**:为了隔离不同项目的需求,使用Python的virtualenv或venv创建虚拟环境,避免版本冲突。 10. **环境复现性**:记录和分享详细的环境配置步骤,以确保其他团队成员或未来自己能够复现相同的测试环境...