python的virtualenv,python virtual environment
之前详细讲过如何在windows上部署conda环境。详情请查看我的博客。其他平台(主要是linux和macos)在我看来都是一样的,除了有几个命令是从conda改成source。(例如,conda activate myvenv成为source activate myvenv)
什么是virtualenv(venv)?这是一个虚拟环境管理器,对于非数据科学领域的开发者来说非常实用。它允许您为每个项目甚至每个脚本配置定制的Python解释器环境。这样最大的好处就是我可以不污染开发环境。
比如我有一个专门写爬虫的项目,所以可能需要Requests、BS4、LXML、PySpider、Scrapy等包或者框架。这个时候我也有一个项目想写一些GUI界面。使用的主要包是pyqt。如果是在原生python解释器环境下,我必须把这个GUI包(可能我的crawler项目中永远不会涉及到它)放到下载的包中。不仅仅是看着难受(不考虑反复卸载包)。久而久之,你的开发环境可能会变得巨大,因为里面堆了很多垃圾包(你基本上不会再用了)和很多配置文件,很难找到。这对电脑的危害很大。然而,venv可以创建任意数量的虚拟环境。只要指定了当前环境,pip安装的包就只会在这个环境中,这个环境与操作系统部署的python环境是隔离的。有两个好处。首先我可以把常见的虚拟环境分类,互不污染。(比如机器学习,爬虫不干扰)其次,一旦我不用了,可以直接删除虚拟环境,不用管各种文件残留,关联问题。什么是pip pip是Python中最常用的包管理器。该工具提供了查找、下载、安装和卸载Python包的功能。它能自动处理依赖。(linux开发者rrdbq对此深恶痛绝,也知道yum的出现。)一般pip自带解释器,也可以安装。pip的出现让像java这样的第三方包难以管理的情况消失了(当然java也可以很方便的处理)。主要的安装包使用方法是在命令行上执行pip install packagename。当然后面提到的conda也有包管理器的功能,安装包命令是conda install packagename。
康达是什么?最近有人问我venv和康达有什么区别?其实在我看来差别不是特别大。主要如下。
如果venv是虚拟环境管理器,pip是包管理器,那么conda就是两者的结合。可惜conda的包管理器比较一般,会过于依赖安装。比如TensorFlow自动安装cudnn(主机配置cudnn时),大部分时间还是用pip安装包。不过注意pip只能安装Python的包,conda可以安装一些工具软件,即使这些软件不是基于Python开发的。,不过康达的虚拟环境管理还是可以的。一般来说,venv会被用来在这个项目下创建一个虚拟环境。最坏的情况,venv的文件夹(包括配置文件)会创建在项目下。当然,在pycharm下创建虚拟环境是另一回事。但是conda的每个虚拟环境都不占用项目文件夹的空间,都是在用户设定的位置创建的,这样更方便多个项目共享一个虚拟环境(只是方便,venv也可以,但是venv一般会占用项目文件夹的空间,venv命令行的使用有局限性)。Conda虚拟环境是独立于操作系统解释器环境的,即无论什么版本的操作系统解释器(甚至2.7),我都可以指定python版本的虚拟环境为3.6(见文章开头提到的原博客),而venv是依赖于主环境的。对于科学计算和大数据领域的人来说,conda是自动集成numpy这样的主流科学计算包的环境。venv必须自己下载每个软件包。Conda有图形环境管理器,venv没有。(虽然开发者几乎不用图形界面conda)
嗯,对于我这种一直在用conda的人来说,问我venv怎么样,本来就有失偏颇,但是个人觉得conda非常好用。尤其是在图形环境(见下文)(如windows、ubuntu)中安装anaconda,集成了jupyter notebook等计算机数据分析师常用工具。当然,如果你是一个命令行(见下图)专家(当然,conda并不需要熟悉太多命令)并且觉得Anaconda自带太多用不到的包,只想使用conda的环境管理和包管理功能,那么Anaconda确实太过庞大了,推荐使用Miniconda,它是Anaconda的无界面和预装包的版本。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。