全栈工程师开发手册 (作者:栾鹏)
架构系列文章


在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被pip安装到Python3的site-packages目录下。

如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办?

这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。

首先,我们用pip安装virtualenv:

$ pip3 install virtualenv

然后,假定我们要开发一个新的项目,需要一套独立的Python运行环境,可以这么做:

第一步,创建目录:

Mac:~ michael$ mkdir myproject
Mac:~ michael$ cd myproject/
Mac:myproject michael$

第二步,创建一个独立的Python运行环境,命名为venv:

Mac:myproject michael$ virtualenv --no-site-packages venv
Using base prefix '/usr/local/.../Python.framework/Versions/3.4'
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip, wheel...done.

这里会默认使用当前python的环境,如果想指定目标python版本环境,可以使用

$ virtualenv -p /usr/bin/python3.6 --no-site-packages venv

这样就会使用python3.6的环境到虚拟环境中。

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

新建的Python环境被放到当前目录下的venv目录。有了venv这个Python环境,可以用source进入该环境:

Mac:myproject michael$ source venv/bin/activate
(venv)Mac:myproject michael$

注意到命令提示符变了,有个(venv)前缀,表示当前环境是一个名为venv的Python环境。

下面正常安装各种第三方包,并运行python命令:

(venv)Mac:myproject michael$ pip install jinja2...
Successfully installed jinja2-2.7.3 markupsafe-0.23
(venv)Mac:myproject michael$ python myapp.py...

在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。

如果我们需要启动py文件,需要讲项目文件夹复制到虚拟环境中venv文件夹下。

退出当前的venv环境,使用deactivate命令:

(venv)Mac:myproject michael$ deactivate
Mac:myproject michael$

此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行。

完全可以针对每个应用创建独立的Python运行环境,这样就可以对每个应用的Python环境进行隔离。

virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。

virtualenv虚拟独立python环境使用相关推荐

  1. 如何在虚拟linux环境运行python_linux下使用virtualenv虚拟独立python环境

    virtualenv可以搭建虚拟且独立的python环境,可以使每个项目环境与其他项目独立开来,保持环境的干净,解决包冲突问题. 一.安装virtualenv virtualenv实际上是一个pyth ...

  2. python 当前目录_virtualenvwrapper打造多版本Python环境

    前言 面对多个 Python 开发项目时,需要针对不同的项目创建相应的开发环境.通常情况下,使用 virtualenv 创建一个虚拟的独立 Python 环境,但是 virtualenv 创建的环境相 ...

  3. python环境安装有问题_python基础——python安装及问题解决

    python3.7.3安装 CentOS 7上默认安装的python版本是2.7.5,系统自带的旧版本python被系统很多其他软件环境依赖,因此不能卸载原Python,但可以再安装另一个Python ...

  4. 【python】anaconda 管理 python 环境

    anaconda 管理虚拟环境 anaconda 简介 python 虚拟环境的安装 查看当前 anaconda中所有的虚拟环境 创建新的虚拟环境 激活所创建的虚拟环境 删除指定的虚拟环境 退出当前虚 ...

  5. virtualenv创建独立的Python环境

    安装virtualenv以及将指定虚拟环境中运行的python版本为python3.X,而不是python2.7 关于virtualenv 从字面上可以理解到,virtualenv旨在搭建一个虚拟py ...

  6. windows10下使用virtualenv虚拟技术,管理多个python版本,多个项目包环境

    windows10下使用virtualenv虚拟技术,管理多个python解释器版本,多个项目包环境 文章目录 windows10下使用virtualenv虚拟技术,管理多个python解释器版本,多 ...

  7. Linux系统 05 python环境配置02 之 virtualenv与virtualenvwrappe以及freeze

    思考:在使用 Python 开发的过程中,工程多了以后,会不会遇到如下问题: 不同的工程依赖不同版本的库的问题,如何让一台机器同时跑不同的python或django版本: 开发过程中不想让物理环境里充 ...

  8. 配置独立于系统的PYTHON环境

    配置独立于系统的PYTHON环境 python 当前用户包 一种解决方案是在利用本机的python环境的基础上,将python的包安装在当前user的.local文件夹下 一共有两种方式来实现pip的 ...

  9. Python独立运行环境

    在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. 如果我们要同时开发多个应用程序,那这 ...

最新文章

  1. rsync使用sudo权限
  2. ajax请求的步骤,ajax请求的五个步骤
  3. mongodb集群 java_MongoDB集群JavaAPI插入数据
  4. 深入理解分布式技术 - Redis 分布式锁解决方案
  5. boost::hana::has_common用法的测试程序
  6. hdu4565之矩阵快速幂
  7. C++学习笔记(十二):重载函数
  8. ArcGIS API For JS 之Symbol
  9. /etc/profile、~/.bash_profile、~/.bashrc和/etc/bashrc
  10. 火爆的文字游戏你玩了吗?「GitHub 热点速览 v.22.06」
  11. 普通人无法预约鸿蒙系统,小蝶加人引流软件支持鸿蒙系统吗
  12. 5.22 使用筛选功能快速过滤指定条件的数据 [原创Excel教程]
  13. 完全支持双层PDF!开源的PDF分离与合并软件,C#版本(转自codeproject)
  14. matlab自动对齐
  15. 关于图文识别功能相关技术的大致实现
  16. C语言 五子棋游戏(也可n子棋)
  17. 2021届 联发科技人力面试 嵌入式软件
  18. Monty Hall Problem
  19. 豆瓣爬虫实战——Angelababy到底是什么风评
  20. Centos下启动和关闭MySQL

热门文章

  1. 移动应用开发专业简介(610212)
  2. qq纯黑主题怎么设置_qq背景变黑色,怎么调过来
  3. radiobutton 设置为不能点击_谷歌要求:安卓 11 相机默认不能设置为“美颜”模式...
  4. jQuery微博登录
  5. ffmpeg转码器移植VC的工程:ffmpeg for MFC
  6. ffdshow 源代码分析 4: 位图覆盖滤镜(滤镜部分Filter)
  7. C++发送HTTP请求获取网页HTML代码
  8. MSU 出品的 H.264 编码器比较 (2012.5)
  9. Cache 和 Buffer 有什么区别?
  10. java将数组置零的函数,Java Script 数组内置函数