1 为什么需要虚拟环境?
- 在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy、Beautiful Soup等,但是可能每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要我们根据需求不断的更新或卸载相应的库。直接怼我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,管理也相当混乱。如一下场景:
- 场景1:项目A需要某个框架1.0版本,项目B需要这个库的2.0版本。如果没有安装虚拟环境,那么当你使用这两个项目时,你就需要 来回 的卸载安装了,这样很容易就给你的项目带来莫名的错误;
- 场景2:公司之前的项目需要python2.7环境下运行,而你接手的项目需要在python3环境中运行,想想就应该知道,如果不使用虚拟环境,这这两个项目可能无法同时使用,使用python3则公司之前的项目可能无法运行,反正则新项目运行有麻烦。而如果虚拟环境可以分别为这两个项目配置不同的运行环境,这样两个项目就可以同时运行。
- Tips:其实虚拟环境好处也确实比较多,会给我们项目的开发带来许多的好处,但是初学者,建议还是不要这么折腾,我们的首要目的是更快的掌握更多的知识,研究virtualenv会花费一些额外的经历,而且意志不强的同学很容易遭受打击,但是这个优点我们还是要记下来的方便以后要用的时候能很快的想起。
2 Anaconda创建、激活、退出、删除虚拟环境
在Anaconda中conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。所以对虚拟环境进行创建、删除等操作需要使用conda命令。
创建虚拟环境
使用 conda create -n your_env_name python=X.X(2.7、3.6等),anaconda 命令创建python版本为X.X、名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。 指定python版本为2.7,注意至少需要指定python版本或者要安装的包, 在不指定python版本时,自动安装最新python版本。
创建虚拟环境
conda create -n env_name python=2.7
同时安装必要的包
conda create -n env_name numpy matplotlib python=3.5
激活虚拟环境
activate your_env_nam
退出虚拟环境
deactivate env_name
删除虚拟环境
conda remove -n your_env_name(虚拟环境名称) --all
删除虚拟环境中的包
conda remove --name $your_env_name $package_name(包名)
- conda的一些常用命令
conda list #查看安装了哪些包。
conda install scikit-learn(包名) #安装包
conda install tensorflow-gpu #安装GPU版本的tensorflow
conda install keras #安装keras
conda env list 或 conda info -e #查看当前存在哪些虚拟环境
conda update conda #检查更新当前conda
3 conda创建、激活虚拟环境(一个完整的例子)
参考: Anaconda创建虚拟环境 windows系统中,在cmd里(前提配置好环境变量):
- 查看conda版本
conda -V
- 激活base环境(anaconda自带的就是base虚拟环境,每次需要先激活base环境,才能创建或进入其他虚拟环境)
conda activate #激活base环境
python --version #查看base环境中的python版本
conda env list #查看现有虚拟环境
- 创建新的虚拟环境
conda create -n py36 python=3.6 #conda create -n 是创建语句;py36是虚拟环境名称(自拟);python=3.6是需要安装的版本
conda env list #在此查看虚拟环境列表,发现有两个虚拟环境
conda activate py36 #激活培养6虚拟环境
python --version #查看这个虚拟环境里的python版本,发现安装了3.6的python
conda install numpy #可继续在此虚拟环境中安装其他库
可以在py36虚拟环境中运行
2&3 虚拟环境的创建可以使用Anaconda Navigator可视化操作
- 省去了在dos中的命令操作
4 spyder使用conda 虚拟环境
-
Spyder是一个挺好用的python IDE。
如果想在虚拟环境中用Spyder,或者 说是Spyder中用虚拟环境中的库,则需要在虚拟环境中安装并启动,可以通过命令的方式,也可以通过Anaconda来操作。
创建虚拟环境myenv,再安装spyder,最后启动。
conda create -n myenv python=3.6
conda activate myenv
conda install spyder
spyder
在anaconda下创建了很多个python虚拟环境,现在我想使用 spyder 运行python程序,
并且使用其中某一个虚拟环境,方法如下:
首先要知道 Anaconda自带的spyder使用的是base环境,现在我想使用自己创建的 pytorch 虚拟环境。
1)打开 Anaconda prompt ,切换至想要使用的虚拟环境,输入命令:
activate pytorch
2)在此虚拟环境下安装 spyder,输入命令:
conda install spyder
经过一段时间的安装,就会发现 所有程序 ——> Anaconda 下面多了一个 spyder(pytorch)
3)打开 Spyder(pytorch),看界面右下角就会发现,当前环境已经变成了 pytorch
5 conda install和pip install区别conda ≈ pip(python包管理) + virtualenv(虚拟环境) + 非python依赖包管理
非python依赖包管理
conda是一个跨平台软件包和环境管理器,conda软件包是二进制文件。从来不需要安装任何编译器。另外,conda软件包不限于Python软件。它们可能还包含C或C ++库,R软件包或任何其他软件。
这凸显了conda和pip之间的关键区别。pip安装Python软件包,而conda安装软件包,其中可能包含以任何语言编写的软件。例如,在使用pip之前,必须通过系统软件包管理器或下载并运行安装程序来安装Python解释器。另一方面,Conda可以直接安装Python软件包以及Python解释器。
python包管理
conda install xxx ,不管在什么环境下载的包,都统一放在一个Conda目录里面,比如在我电脑上(mac):/Users/UserName/opt/miniconda3/pkgs
在目录下可以看到很多已经通过conda install的包。
所以,在某个环境下⾯下载了某个包,再到另外⼀个环境下载同样的包,conda会⾃动在上⾯的⽬录⾥⾯找,如果有,就不会重复下载,⽽是将这个包的site-packages下的⽂件复制到当前环境下(和直接pip install ⼀样)如:
~/.conda/envs/EnvName/python3.6/site-packages
使⽤conda uninstall xxx时,和pip uninstall⼀样,删除了当前环境site-packages⾥⾯的包内容,但是在上述⽬录⾥⾯还存在这这个包,此时再到另外⼀个环境下载这个包,还是将site-ackages复制⼀份到当前环境下,做到了⼀次下载,到处使⽤。
pip
pip install xxx ,在特定环境中使用pip,下载的包会存在环境目录里,如:
~/.conda/envs/EnvName/python3.6/site-packages
使用pip uninstall xxx,包就卸载掉了。
conda与pip总结:
- conda能创建虚拟环境,可以实现不同版本包的并行管理
- pip就很单一,只负责安装pypi的包,也不管虚拟环境;
- 有时候使用conda给特定环境安装python包时没有资源,需要使用pip,这时一定要先activate特定环境,然后使用pip命令安装包,这时是给特定的环境安装,和使用conda安装的位置是一样的
- 只要在一个虚拟环境中(可提前使用conda激活某个虚拟环境),无论使用conda还是pip都是一样的。特别的,在spyder控制台中安装包,由于一般spyder都是在base环境中,所以我们在控制台中使用conda和pip是一样的。
- virtual Enviroment
- conda Enviroment
- system interpreter
1. virtual Enviroment
- 为每个项目建立一个新的虚拟环境,能够独立管理该项目里面的包
- 例如:如果某个项目需要python 2 版本,我们不可能直接把整个系统的python3降为python2;这时候只需要给这个项目单独创建一个虚拟环境,安装上python2即可。
- 这种一般适合项目需要的 第三方包 不多;
- 若两项目比较相似,项目B可以不用再创建新的虚拟环境,直接使用已有的项目A虚拟环境即可
2. conda Enviroment
- conda环境在安装Anaconda的时候就自带了一个base环境
- 此外,我们还可以通过
conda create -n env_name
或者Anaconda Navigator创建新的conda环境;例如我们前面创建了pytorchGPU环境。 - conda环境是系统层面的,不专门服务于某个项目。例如spyder(base)中运行的程序都是在base环境中;
conda环境
大于Virtualenv 环境
3. system interpreter
- 系统解释器 可 选择系统里面安装的Python作为解释器,不推荐使用
- 可以选择conda的base环境作为系统解释器
- system interpreter和conda Enviroment是类似的,属于一个层面(当然,conda Enviroment可能包含更多的包)