前提
在windows系统中安装好AnaConda、CUDA以及对应版本的Pytorch并配置好相应的环境后,便可以在PyCharm平台上开发并运行自己的第一个项目。但是在创建项目的时候,种类众多的虚拟环境让人眼花缭乱,也无法做出正确的选择,其原因正是对虚拟环境的理解不到位。因此,本文将就这些困扰的问题做一个随笔笔记。
1.为什么需要虚拟环境
在实际的项目开发中,可能面临需要同时开发两个及以上的不同的项目,这两个项目可能所依赖的框架库不同或者需要同一个框架的不同版本或者所需要的第三方包不同,这样的话,需要反复卸载并重新安装相应的库。这样带来的问题就是在管理这些库或者包的时候显得非常麻烦甚至陷入到管理混乱的局面,对我们的开发将非常不利。举例两个场景:
场景1:项目A需要某个框架的1.0版本,而项目B需要这个框架的2.0版本,如果没有让这两个项目所处的环境不同,而是处在同一个环境的话,当使用这两个项目时,就会反复卸载安装相应的框架版本,甚至造成未知错误;
场景2:某一个项目需要python2环境下运行,另外一个项目需要在python3环境中运行,如果不使用虚拟环境,这两个项目可能无法同时使用,使用python3则之前的项目可能无法运行,反之则新项目运行有麻烦。而如果虚拟环境可以分别为这两个项目配置不同的运行环境,这样两个项目就可以在不同的虚拟环境下同时运行。
2.Anaconda创建、激活、退出、删除虚拟环境
参考:https://www.cnblogs.com/ethan-wen/p/16894617.html
在Anaconda中conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。所以对虚拟环境进行创建、删除等操作需要使用conda命令。
(1)创建虚拟环境
在Anaconda Prompt窗口中使用命令 conda create -n env_name python=X.X 创建版本为 python为 X.X,名称为 env_name 的虚拟环境,env_name 文件可以在Anaconda安装目录envs文件下找到。如果不指定python版本,则会安装最新的python版本。当然也可以在创建虚拟环境的同时安装一些必要的包,使用命令:conda create -n env_name numpy matplotlib python=X.X
(2)激活(进入)虚拟环境
当一开始进入到Anaconda Prompt窗口时,当前的虚拟环境为在安装 Anaconda 时自带的环境 base 环境 ,如下图所示
因此想要进入自己刚刚创建的虚拟环境,就必须在该窗口中使用命令: activate env_name 。
退出当前虚拟环境,使用命令:deactivate env_name 。
删除虚拟环境,使用命令:conda remove -n env_name --all。
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.虚拟环境的创建可以使用 Anaconda Navigator可视化操作
4.conda install 和 pip install 的区别
参考:https://blog.csdn.net/qq_29598161/article/details/108422233
conda ≈ pip(python包管理) + virtualenv(虚拟环境) + 非python(C++等)依赖包管理
(1)**非 Python 包依赖管理 **
conda是一个跨平台软件包和环境管理器,conda软件包是二进制文件。从来不需要安装任何编译器。另外,conda软件包不限于Python软件。它们可能还包含C或C ++库,R软件包或任何其他软件。
这凸显了conda和pip之间的关键区别。pip安装Python软件包,而conda安装软件包,其中可能包含以任何语言编写的软件。例如,在使用pip之前,必须通过系统软件包管理器或下载并运行安装程序来安装Python解释器。另一方面,Conda可以直接安装Python软件包以及Python解释器。
(2)Python 包管理
conda install xxx ,不管在什么环境下载的包,都统一放在一个Conda目录里面,比如在我电脑上:C:\Users\admin\Anaconda3\pkgs
在目录下可以看到很多已经通过conda install的包。
所以,在某个环境下⾯下载了某个包,再到另外⼀个环境下载同样的包,conda会⾃动在上⾯的⽬录⾥⾯找,如果有,就不会重复下载,⽽是将这个包的site-packages下的⽂件复制到当前环境下(和直接pip install ⼀样)如:
~/.conda/envs/EnvName/python3.6/site-packages
使⽤conda uninstall xxx时,和pip uninstall⼀样,删除了当前环境site-packages⾥⾯的包内容,但是在上述⽬录⾥⾯还存在着这个包,此时再到另外⼀个环境下载这个包,还是将site-ackages复制⼀份到当前环境下,做到了⼀次下载,多处使⽤。
(3) pip
pip install xxx ,在特定环境中使用pip,下载的包会存在环境目录里,如:
~/.conda/envs/EnvName/python3.6/site-packages,一般都在site_packages里,但有时候又在别的文件夹里。
使用pip uninstall xxx,包就卸载掉了。
(4) conda 与 pip 的总结
conda能创建虚拟环境,可以实现不同版本包的并行管理;
pip就很单一,只负责安装pypi的包,也不管虚拟环境;
有时候使用conda给特定环境安装python包时没有资源,需要使用pip,这时一定要先activate特定环境,然后使用pip命令安装包,这时是给特定的环境安装,和使用conda安装的位置是一样的;
只要在一个虚拟环境中(可提前使用conda激活某个虚拟环境),无论使用conda还是pip都是一样的。特别的,在spyder控制台中安装包,由于一般spyder都是在base环境中,所以我们在控制台中使用conda和pip是一样的。
Pytorch中Virtualenv 环境,Conda环境,系统解释器的区别
参考:https://blog.csdn.net/u011727262/article/details/102691695
参考:https://blog.csdn.net/Spring_24/article/details/96484794
1.virtual Enviroment
2.conda Enviroment
3.system interpreter
1.virtual Enviroment
为每个项目建立一个新的虚拟环境,能够独立管理该项目里面的包
例如:如果某个项目需要python 2 版本,我们不可能直接把整个系统的python3降为python2;这时候只需要给这个项目单独创建一个虚拟环境,安装上python2即可。
这种一般适合项目需要的 第三方包不多;
若两项目比较相似,项目B可以不用再创建新的虚拟环境,直接使用已有的项目A虚拟环境即可
2.conda Enviroment
![](/i/l/?n=22&i=blog/2680510/202211/2680510-20221121114344005-1476612498.png)
conda环境在安装Anaconda的时候就自带了一个base环境;
此外,我们还可以通过conda create -n env_name或者Anaconda Navigator创建新的conda环境;
conda环境是系统层面的,不专门服务于某个项目;
conda环境 大于 Virtualenv 环境。
3.system interpreter
系统解释器,可选择系统里面安装的 Python 作为解释器,不推荐使用
可以选择 conda 的base环境作为系统解释器
system interpreter和conda Enviroment是类似的,属于一个层面(当然,conda Enviroment可能包含更多的包)