首页 > 其他分享 >有关虚拟环境以及包管理器的随笔

有关虚拟环境以及包管理器的随笔

时间:2022-11-21 11:58:12浏览次数:65  
标签:管理器 项目 环境 虚拟环境 conda pip 随笔 安装

前提

在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可能包含更多的包)

标签:管理器,项目,环境,虚拟环境,conda,pip,随笔,安装
From: https://www.cnblogs.com/yaoNAJAJRM/p/16910959.html

相关文章

  • FIXMAP内存管理器
    fixedmap是被linuxkernel用来解决一类问题的机制,这类问题的共同特点是:(1)在很早期的阶段需要进行地址映射,而此时,由于内存管理模块还没有完成初始化,不能动态分配内存,也就......
  • 新手随笔java+cpp
    随便写写关于java和cpp感悟·1.初学java(在学ing),学了几个月cpp(也不算熟练,但是目前比java好点)·2.java应该是更灵活的,比如【一些灵活点和区别】,二维数组不是非要矩阵形......
  • 【Jmeter】21天打卡 05之配置元件之http信息头+Cookie管理器
    新建测试计划-线程组-取样器(http请求)-添加监听器(查看结果数)在http请求中输入www.baidu.com,查看结果树请求中的requestheaders头部字段包括如图1   Connectionk......
  • 怎么打开SQL server配置管理器
    原文链接:https://blog.csdn.net/YINZHE__/article/details/1205753211.在开始菜单中找2.如果开始菜单中找不到按win键+R键打开后在里面输入SQLServerManager10.msc......
  • SELinux 随笔
    参考文章:https://www.cnblogs.com/zhongguiyao/p/13955398.html 常用的定义,方便使用一组权限或一类对象源码位置:/system/sepolicy/public/global_macros比如下面这......
  • Node.js学习随笔
    Node.jsNode.js不是JS,但是和JavaScript的语法非常相似,是一种服务器端技术,他的竞争对手PHP/JAVA/C++/C#/PYTHON-历史上第一次一门语言可以通吃前后端-前端崛起原因之......
  • 关于GET/POST请求传输时URL编码的介绍记录随笔
    UTF-8编码的汉字:少数是汉字每个占用3个字节,多数占用4个字节#GET请求编码Chrome会先把URL中非ASCII字符按照某种编码格式(谷歌浏览器是UTF-8)编码成byte数组后,然后转成16进......
  • 思路随笔
    熟悉一个项目,先从获取数据库开始2滤清思路最重要训练快速了解项目,从头到尾一句句理解太慢了.还是要从后往前反向思考.了解分支.部分分支做了什么。3最最有效的办......
  • 【Python小随笔】本周一、上周一、上周末日期
    importdatetime#当前日期deftoday_date():returndatetime.datetime.now().date()#上周一deflast_monday():returnstr(datetime.datetime.now()......
  • C语言随笔4
    结构体(自己创造出来的一种类型)structBook                                   struct结构体......