前言

在Ubuntu系统中,系统一般会默认安装python2.x和3.x,像我近期买的阿里云ECS默认安装了2.7.2和3.5.2,所有pip安装的第三方包都会被放在默认的site-apckages目录下。

如果我们在同一台机器上同时开发多个应用程序,问题一:python的版本问题,不同程序可能需要不同的版本;问题二:需要的不同第三方包管理,如果都放在一起总感觉不太好,强迫症。

如果可以为每一个应用程序开辟一个独立的python运行环境就好了,所以就有了 virtualven

下载virtualenv

apt更新

sudo apt-get update //更新软件源中的所有软件列表
sudo apt-get upgrade //对照列表,更新已安装的软件

pip安装virtualenv

pip install virtualenv //不讨论pip和pip3问题,

使用virtualenv

新建项目目录

sudo mkdir myproject
cd myproject

创建虚拟环境

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

一般项目的虚拟环境命名为venv。参数解释:

  • -p /usr/bin/python3.5,-p指定解释器路径,可以指定虚拟环境python版本。
  • --no-site-packages,已经安装到系统Python环境中的所有第三方包都不会复制过来,得到一个不带任何第三方包的“干净”的Python运行环境。

激活虚拟环境

source venv/bin/activate

通过source命令进入虚拟环境,注意到命令提示符有所变化,前面多了一个(venv),表示当前环境是一个名为venv的Python环境。

安装第三方包

pip install django

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

退出虚拟环境

deactivate

回到正常系统环境后,再使用pip安装的第三方包就会放在系统python环境中。

virtualenv是如何创建“独立”的Python运行环境的?

原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。所以想要创建虚拟环境,系统应该先安装该版本的python环境。

项目移植

在项目打包移植时可以抛弃虚拟环境(一般很大),利用命令生成项目所引用的第三方包,在项目部署时新建虚拟环境,重新下载这些第三方包即可。

pip list //查看当前环境中安装的第三方库
pip freeze > requirements.txt //导出当前环境第三方库信息
pip install -r requirements.txt //移植机器重新安装第三方库

总结

virtualenv为应用程序提供了隔离的Python运行环境,解决了不同应用间多版本的冲突问题。如果一台机子上有太多太多的项目,可以考虑使用virtualenvwrapper来统一管理。

Python最强的IDE——PyCharm在创建项目时会自动创建虚拟环境,安装第三方包可以通过左上角file-settings-project interpreter,点击"+"号,搜索第三方包直接安装就好。

参考链接

virtualenv - 廖雪峰的官方网站:virtualenv

python虚拟环境:virturlenv


本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


#Python学习#python虚拟环境——virtualenv的更多相关文章

  1. 1 python学习——python环境配置

    1 python学习--python环境配置 要学习python语言,光看书看教程还是不好,得动手去写.当然,不管学习什么编程语言,最佳的方式还在于实践. 要实践,先得有一个Python解释器来解释执 ...

  2. Python学习---Python安装与基础1205

    1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...

  3. Python学习---Python下[元组]的学习

    元组是不可变的, 用小括号()定义,而且一旦定义 ,不可变[类型是tuple] [元组看做一个整体,不可拆分,不可赋值,但可以全部重新赋值] 通过圆括号,用逗号分隔,常用在使语句或用户定义的函数能够安 ...

  4. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...

  5. ubuntu python 安装使用虚拟环境 virtualenv

    1,虚拟环境是干啥用的? 我在电脑上装了cuda,显卡驱动,cudnn等一堆配套文件,然后又依赖于cuda和驱动安装了tensorflow2.0的gpu测试版,不知为何,我每次跑完tf2程序电脑都会卡 ...

  6. Python学习--Python基础语法

    第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗 ...

  7. python学习-python入门

    开始学习python,开始记录. 第一个小程序:登陆系统 功能:1.通过文件名和密码导入用户名和密码~ 2.用户输入用户名和密码 3.将用户输入的用户名进行比对,先判断用户名是否在黑名单里面,如果在黑 ...

  8. Python学习---Python的异步IO[all]

    1.1.1. 前期环境准备和基础知识 安装: pip3 install aiohttp pip3 install grequests pip3 install wheel pip3 install s ...

  9. Python学习:python网址收集

    Python学习网址收集: 语法学习:http://www.cnblogs.com/hongten/tag/python/             http://www.liaoxuefeng.com ...

随机推荐

  1. linux yum 本地源配置

    1.查看硬盘情况 lsblk sr0就是光驱了 2.执行挂载命令 查看光驱cd /devls 执行命令 mount /dev/sr0  /mnt 将光驱挂载到 /mnt 目录 这样光驱就挂载好了 2. ...

  2. 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

    Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...

  3. Event.target和Event.currentTarget的区别

    <style> * { margin:0; padding:0; list-style:none; } #ul { width:400px; height:250px; margin:0 ...

  4. Java四种排序:冒泡,选择,插入,二分(折半插入)

    四种排序:冒泡,选择,插入,二分(折半插入) public class Test{ // public static void main(String[] args) { // Test t=new ...

  5. .net 打开Excel文档并转为DataTable

    /// <summary> /// 打开Excel文档并转为DataTable /// </summary> /// <returns></returns&g ...

  6. ubuntu-server-12.04.2安装配置jdk

    原文链接:http://blog.csdn.net/amymengfan/article/details/9958461 我选择的是离线安装,这需要先下载好jdk安装包(下载地址:http://www ...

  7. 视图,sql注入问题,事物,存储过程

    视图:本质是一张虚拟的表数据来自select语句用途是保障原表安全 功能1:隐藏部分数据,开放指定数据功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能 例如:se ...

  8. Web结构组件

    一.Web结构组件 1.代理 位于客户端和服务器之间的HTTP实体,接收客户端的所有HTTP请求,并将这些请求转发给HTTP服务器. 2.缓存 HTTP的仓库,使常用的页面的副本可以保存在离客户端更近 ...

  9. noip第23课作业

    1.   营救 铁塔尼号遇险了!他发出了求救信号.距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里. 通过侦测,哥伦比亚号获取了一张海洋图.这张图将海洋部分分化成n*n个比较小的单位,其 ...

  10. 谈谈HashMap线程不安全的体现

    原文出处: Hosee HashMap的原理以及如何实现,之前在JDK7与JDK8中HashMap的实现中已经说明了. 那么,为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢 ...