原文链接

虚拟环境

Python 开发中所谓的虚拟环境,就是为 Python 版本及第三方库创建独立的开发环境,使不同项目之间互不干扰。借助于虚拟环境,我们可以在同一台电脑上构建出项目 A 在基于 Python 2 的环境中运行,而项目 B 可以在基于 Python 3 的环境中运行。

虚拟环境需要通过一些工具创建,常见的几种:

1, virtualenv。这是 Python 最为常用的虚拟环境工具,简单有效,我自己就用它。本文稍后部分会介绍下基本的安装和使用。网上也有相当多的使用教程。

virtualenv 的一个局限是无法统一管理你电脑上的所有虚拟环境,因此环境多了之后,可能会遗漏,或造成冗余。对此,有一个扩展工具 virtualenvwrapper,能帮你统一管理各个环境。

2, venv。它的实现很大程度基于 virtualenv,使用方法也很类似。而 Python 现已内置了 venv。

3, conda。这个工具相当于 pip + virtualenv + virtualenvwrapper,它不仅能创建和管理虚拟环境,本身还是一个包管理器,可以下载安装第三方库。功能完善,使用也不复杂。著名的数据分析开发包 anaconda 里就默认使用 conda 作为环境和模块管理工具。

接下来我们简要介绍下:

virtualenv 的使用

安装

在系统命令行通过 pip 或者 easy_install 安装即可:

pip install virtualenv

如果你的命令行无法执行 python、pip 及后续的 virtualenv 命令,请检查你环境变量里的 PATH 路径。(还不熟悉的请在公众号回复关键字 安装)

创建

进入到合适的目录下(一般是项目根目录,但不建议加入 git 仓库里提交),通过 virtualenv 命令创建一个名为 MY_ENV 的环境(这个名字可自定义):

virtualenv MY_ENV

没有报错的话,会成功创建目录 MY_ENV,其中有一些目录和文件,这就是我们的虚拟环境所在了。

激活

使用虚拟环境前,需要“激活”环境:

windows

进入
MY_ENV\Scripts 目录,运行 activate

linux

source MY_ENV/bin/activate

路径根据你所在位置会有所不同,也可以使用完整路径。

激活环境之后,命令行前面会用括号标识出你所在的环境。这时候再通过 pip 安装第三方模块,就不会影响到系统本身的 Python 环境。

关闭

当不需要环境时,可以通过 deactivate 命令关闭。当然,直接关掉命令行窗口也没毛病。

指定 Python

虚拟环境的创建,默认是使用 virtualenv 所在的那个 Python 版本。如果你电脑上有多个 Python,则可以指定环境的 Python 版本,例如:

virtualenv -p C:python27python.exe ENV27

虚拟环境的本质

为什么简单几行命令,就可以实现 Python 环境的分离?本质上靠的还是环境变量里的 PATH 路径。

PATH 的作用,就是当你执行一个命令时,系统要知道去哪里找这个命令。PATH 里有多个路径,就按顺序从前到后依次查找。执行 python、pip 等命令时,都是按照这个方式进行。

通过 echo 命令可以查看路径:

windows

linux

当版本出现混乱时,往往就是 PATH 中有多个路径,不同路径中有含有相同的命令,以至于执行了并非你预期的那个版本中的命令。比如你的 python 命令是在 python27 目录下,而 pip 执行的却是 python36/Scripts 里的,然后就发生了“明明安装成功了,程序里却找不到”的情况。

而当激活一个虚拟环境时,就相当于在 PATH 的开头增加了我们创建的目录,使用这个目录里的 Python 及相关库。安装新的库也是装在新建的这个目录之下。从而避免与其他版本发生干扰。

如果你不清楚你所用的命令究竟是哪里的,可以在命令行中使用 where/which 命令查看:

PyCharm 里的虚拟环境

可能很多同学还不习惯用命令行,而是完全使用 IDE 来进行配置。那么最后我特别提一下 PyCharm 的情况。

新版本的 PyCharm 默认会在创建项目时新建一个虚拟环境,因此不了解这个操作的同学会疑惑,命令行里用 pip 装好的模块为什么到 PyCharm 里就用不了了。简单的解决方法,就是从 PyCharm 的设置面板里安装库。

其他的可选方案:

  1. 建项目时不要选新建虚拟环境
  2. 建项目时选虚拟环境继承已有的库
  3. 建项目时选用命令行创建好的虚拟环境
  4. 建好项目后,在命令行激活对应虚拟环境后再安装库

以上就是关于虚拟环境的一些介绍,留个小作业:亲自动手创建一个虚拟环境,并在其中安装一个第三方库。

Python的virtualenv管理的更多相关文章

  1. virtualenv 管理python 环境

    virualenvvirtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升级不 ...

  2. 【转】利用virtualenv管理Python环境

    virtualenv virtualenv用于创建独立的Python环境,多个python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升 ...

  3. Python 虚拟环境Virtualenv

    本人也是Python爱好者,众所周知,Python扩展多,每次为了测试,安装各种各样的扩展,这样导致本地的Python环境非常混乱,就有人想到搞个隔离环境  和 本地环境没有关系,随时可以删除这个隔离 ...

  4. Python之 Virtualenv简明教程

    virtualenv通过创建独立Python开发环境的工具, 来解决依赖.版本以及间接权限 问题. 比如一个项目依赖Django1.3 而当前全局开发环境为Django1.7, 版本跨度过大, 导致不 ...

  5. python虚拟环境virtualenv简介

    参考网站: https://realpython.com/python-virtual-environments-a-primer/ 一. 创建一个新的虚拟环境 # Python 2: $ virtu ...

  6. [Python] Python 虚拟机 - virtualenv

    virtualenv virtualenv 用于创建一个隔离的 Python 环境. 每个项目都有自己的依赖包,这些依赖包有时存在版本冲突,处理这种情况最好方法就是为每个项目创建一个专属的环境. 安装 ...

  7. 从pip+requirements.txt+virtualenv管理依赖到使用pipenv管理依赖-修改布署方式

    背景: 已经使用pip+requirements.txt+virtualenv管理了项目一段时间,为了不要每次都 导出依赖(本地),安装依赖(服务器) 现在要使用pipenv来管理项目的依赖关系 思路 ...

  8. Python的包管理工具Pip (zz )

    Python的包管理工具Pip 接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_ins ...

  9. python学习笔记10(Python的内存管理)

      用这张图激励一下自己,身边也就只有一位全栈数据工程师!!! 32. Python的内存管理 1. 对象的内存使用 对于整型和短字符串对象,一般内存中只有一个存储,多次引用.其他的长字符串和其他对象 ...

随机推荐

  1. Linux上DNS解析总是选择resolv.conf中第二位的DNS服务器IP地址

    问题现象: 在Linux机器上,用户自建了一台DNS服务器.然后改动/etc/resolv.conf将其服务器IP地址添加到第一项.将阿里云的内网DNS放到第二位,然而在测试过程中发现telnet,p ...

  2. uniapp - 文字收缩展示插件

    插件地址:https://ext.dcloud.net.cn/plugin?id=657

  3. mapdb的适用场景介绍

    对于大部分系统来说,mapdb并无太大价值,而且增加了成本.但是如果一级缓存巨大例如数以十GB级别,或占据了整个JVM的1/2以上,mapdb的价值就会体现出来.正如其官网介绍: MapDB prov ...

  4. win10安装grafana

    1.下载grafana-6.2.5.windows-amd64.msi 2.以管理员身份打开CMD 3.输入 msiexec /i 程序的完整路径 msiexec /i xxx.msi

  5. 使用ES6删除对象中某些属性

    const form = { id: '011', name: '测试一', description: '测试demo' } // 目标: 取到删除description属性的对象, 即下文的data ...

  6. IIS调优--增加并发处理能力

    一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响应,系统基本处于不可用状态.因经验不足,花了很多时间精力解决这个 ...

  7. Vue ElementUI主页面搭建和导航栏使用,并在刷新页面的时候选中状态消失的问题解决

    <template> <div style="height:100%;width: 100%; padding:0 auto; margin: 0 auto;"& ...

  8. springboot放到linux启动报错:The temporary upload location [/tmp/tomcat.8524616412347407692.8111/work/Tomcat/localhost/ROOT/asset] is not valid

    1.背景 笔者的springboot在一个非root用户环境下运行,这种环境下可以保证不被潜在的jar/开源框架漏洞提权. 比如在防火墙上把外网访问来的443端口映射到本地8443的java web端 ...

  9. IIS6远程代码执行漏洞复现CVE-2017-7269

    简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...

  10. 【Spring Boot学习之一】Spring Boot简介

    环境 Java1.8 Spring Boot 1.3.2 一.Spring Boot特点1.使用java运行项目,内置tomcat,无需外部容器:2.减少XML配置,使用properties文件和注解 ...