pip和conda的环境管理,二者到底应该如何使用

https://www.bilibili.com/read/cv26308572/?spm_id_from=444.41.list.card_opus.click
关于pip与conda是否能混用的问题,Anaconda官方早就给出了回答

先说结论,如果conda和pip在相同环境下掺杂使用,尤其是频繁使用这两个工具进行包的安装,可能会导致环境状态混乱

就像其他包管理器一样,大部分这些问题均源于有限的能力来管理未安装的包。通过pip安装后再运行conda,有可能覆盖或潜在地破坏通过pip安装的包。同样,pip可能会升级或删除conda安装的某个包所依赖的包

有一些步骤可以用来避免在使用conda和pip一起时出现问题的环境破坏。一个可靠的方法是只使用conda包。如果需要conda没有提供的软件包,可以使用conda build来创建。对于在PyPI上可用的项目,conda skeleton命令可以生成一个用来创建conda包的配方,几乎不需要进行修改

https://docs.conda.io/projects/conda-build/en/stable/

但如果环境涉及大量只能在PyPI上获得的包,这可能会成为负担。在这些情况下,最安全的做法是先通过conda安装所有支持的包后才使用pip安装不支持的包。此外,应该使用“–upgrade-strategy only-if-needed”参数运行pip,以防止不必要地升级通过conda安装的包。这是运行pip时的默认设置,不应更改

如果预计某项目需要混用conda与pip,最好的做法是将此安装放入一个专门的conda环境中,以保护其他环境免受pip可能会进行的任何修改,因为conda环境是独立的,允许不同版本的包存在

https://conda.io/docs/user-guide/tasks/manage-environments.html

在conda环境中,尽可能使用硬链接而不是复制文件。如果安装了相同的一组包,每个新的conda环境将只需要少量额外的磁盘空间。许多用户依赖于由安装Anaconda或Miniconda创建的“base” conda环境,如果这个环境混杂着pip和conda安装的包,将会更难恢复。另一方面,创建单独的conda环境允许随时整个删除和重新创建环境,而不会影响核心的conda功能

在conda环境中使用pip安装包时,conda并不会察觉到这些变更,并存在破坏环境的风险。一个可靠的方法是创建一个新的环境,并先通过conda安装需要的包,再运行pip。再次强调,主要问题是pip的“状态性(或关联性)”——安装包的顺序会关联更多的状态,这将使事情更难以正常工作

图片

对于经常需要重建的环境,最好的做法是将conda和pip包要求存储在文本文件中。可以通过–file参数将包要求提供给conda,通过-r或–requirement(关于requirement的一些总结其实早就写好了,一直躺在我的草稿箱中)参数提供给pip

图片

一个包含conda和pip要求的文件可以导出或通过conda env命令来控制环境。这两种方法的好处是,描述环境的文件可以方便进行版本控制以及便于他人共享环境

Anaconda非常清楚结合pip和conda可能会遇到的困难。我们希望设置数据科学环境的过程尽可能简单。这就是为什么我们一直在向conda的下一个版本添加新功能,以简化这个过程。虽然还处于测试阶段,但conda 4.6.0允许conda考虑pip安装的包,并根据需要替换这些包或满足现有包的依赖关系。我们仍在测试这些新功能,但预计在不久的将来,conda和pip之间的交互将得到很大改善。

总结

在使用conda后再使用pip

  • 使用conda尽可能多地先安装支持的包,再使用pip

  • 使用“–upgrade-strategy only-if-needed”(默认设置)运行pip

  • 不要使用“–user”参数,避免所有“用户”安装

使用conda进行环境隔离

  • 创建一个conda环境来隔离pip所做的任何更改

  • 由于硬链接特性,不同环境下重复安装包不会复制文件,环境所占空间很小

  • 应注意避免在默认的 conda 环境下(如base)运行 pip

如果需要对环境进行更改,请重新创建环境

  • 一旦在conda环境中使用pip安装包,conda无法定位环境发生变更

  • 要安装额外的conda包,最好重新创建环境

将conda和pip相关的包要求以文本文件形式存储

  • 通过–file参数将包要求提供给conda

  • 通过-r或–requirement参数提供给pip

  • conda env将基于包含conda和pip需求的文件导出或创建环境

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/130780.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql在ubuntu上命令行登陆密码不正确

1.登陆提示如下 2.使用mysql -u root -p登录也是类似的 3.打开宝塔面板 点击root密码,更改密码后即可在命令行界面登录 4.登录效果如下

深度学习环境搭建——之Anaconda3安装配置

序言: 工作中一直从事的是FPGA嵌入式开发,图像处理相关的工作。目前随着AI的浪潮,也被动卷入到深度学习的漩涡中,为了不被漩涡卷入深渊,只能自学些深度学习相关的知识,俗话说“好记性不如烂笔头”何况已经…

profinet是什么?

profinet是什么? 参考:一文读懂Profibus、Profinet、Ethernet的区别 PROFINETPROFIbusetherNET,把Profibus的主从结构移植到以太网上,所以profinet会有Controller和Device,他们的关系可以简单的对应于profibus的Maste…

【C++】构造函数意义 ( 构造函数显式调用与隐式调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )

文章目录 一、构造函数意义1、类的构造函数2、构造函数显式调用与隐式调用3、构造函数替代方案 - 初始化函数4、初始化函数缺陷5、默认构造函数6、代码示例 - 初始化函数无法及时调用 一、构造函数意义 1、类的构造函数 C 提供的 构造函数 和 析构函数 作为 类实例对象的 初始化…

长短期记忆网络(LSTM)

概念 三个门:遗忘门、输入门、输出门 候选记忆单元 记忆单元 隐状态 ot 控制是否让输出,是否要进行重置。 总结 代码实现 import torch from torch import nn from d2l import torch as d2lbatch_size,num_steps 32,35 train_iter,vocab d2l.load_…

Linux中安装MySQL_图解_2023新

1.卸载 为了避免不必要的错误发生,先将原有的文件包进行查询并卸载 // 查询 rpm -qa | grep mysql rpm -qa | grep mari// 卸载 rpm -e 文件名 --nodeps2.将安装包上传到指定文件夹中 这里采用的是Xftp 3.将安装包进行解压 tar -zxvf 文件名 -C 解压路径4.获取解压的全路…

day55:C++ day5,运算符重载剩余部分、静态成员、继承

#include <iostream> #include <cstring> #define pi 3.14 using namespace std;class Shape { protected:double round;double area; public://无参构造Shape():round(40),area(100){cout<<"Shape::无参构造函数&#xff0c;默认周长为40&#xff0c;面…

sql 时间函数

1&#xff0c;前提 今天看同事写的sql里面出现了时间类的函数&#xff0c;平时自己也经常用到&#xff0c;每次都要百度&#xff0c;还不如自己整理记录在一起&#xff0c;方便后续使用。 2&#xff0c;sql时间函数 2.1 获取当前时间&#xff1a; selectNOW() as 当前日期时…

docker 部署 node.js(express) 服务

1、在 express 项目根目录下新增 Dockerfile 文件&#xff0c;内容如下&#xff1a; 创建服务容器的方法&#xff0c;可以根据自己的情况选择&#xff1a; 1、以下示例为宿主机没有安装 node 环境的写法&#xff1b; 2、先在本地构建包含 node 和 express 的基础镜像&#xff0…

JavaScript中的事件捕获(event capturing)和事件冒泡(event bubbling)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 事件捕获和事件冒泡⭐ 事件捕获&#xff08;Event Capturing&#xff09;示例&#xff1a; ⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;示例&#xff1a; ⭐ 应用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开…

计算机组成与设计硬件软件接口学习1

计算机的算术运算 子字并行 &#xff08;大致浏览&#xff09;pdf 170页左右 浮点加法不满足结合律&#xff1a; 适用于整型数据类型的并行执行策略并不适用于浮点数据类型 &#xff0c;原因如上↑ 处理器 流水线 流水线是一种能使多条指令重叠执行的实现技术 流水线技术通…

【C++】类和对象核心总结

类和对象核心知识目录&#xff1a; 一、面向过程和面向对象初步认识 二、类的引入定义&#xff08;struct > class&#xff09; 2.1自定义类型 struct 和 class 的区别 2.2类放在内存中的什么存储区&#xff1f; 2.3类中函数定义的方式 2.3.1声明和定义分离&#xff0…

C++项目:在线五子棋对战(网页版)

文章目录 一、项目介绍&#xff08;一&#xff09;用户管理&#xff08;二&#xff09;匹配对战&#xff08;三&#xff09;聊天功能 二、开发环境三、核心技术四、项目大流程 一、项目介绍 本项目主要实现⼀个网页版的五⼦棋对战游戏&#xff0c;其主要支持以下核心功能&…

【Redis】Bitmap 使用及应用场景

前言&#xff1a;bitmap 占用空间小&#xff0c;查询效率高&#xff0c;在一些场景中使用 bitmap 是一个很好的选择。 一、bitmap 相关命令 SETBIT - 设置指定位置的比特值&#xff0c;可以设为 1 或 0 例如 SETBIT key 10 1&#xff0c;将在 key 对应的 bitmap 中第10位设置为…

Springboot后端跨域处理

跨域 当一台服务器资源从另一台服务器&#xff08;不同的域名或者端口&#xff09;请求一个资源或者接口&#xff0c;就会发起一个跨域HTTP请求。 同源&#xff1a;协议、域名、端口都相同 只要一个不同&#xff0c;就是跨域。 例子 请求方响应方是否跨域原因http://www.ba…

Docker认识即安装

Docker及相关概念 Docker和虚拟机方式的区别&#xff1a;虚拟机技术是虚拟出一套硬件后&#xff0c;在其上运行一个完整的操作系统&#xff0c;在该系统上在运行所需应用进程&#xff1b;而容器内的应用进程是直接运行于宿主的内核&#xff0c;容器内没有自己的内核&#xff0…

GO语言网络编程(并发编程)Channel

GO语言网络编程&#xff08;并发编程&#xff09;Channel 1、Channel 1.1.1 Channel 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换&#xff0c;但是共享内存在不同的goroutine中容易发生竞态…

java并发编程 CyclicBarrier详解

文章目录 1. CyclicBarrier是什么2 核心属性详解3 核心方法详解3.1 await()3.1 breakBarrier() 4 总结 java 并发编程系列文章目录 1. CyclicBarrier是什么 在java的类注释上描述&#xff1a;一种同步辅助工具&#xff0c;允许一组线程都等待对方到达一个共同的障碍点。Cycli…

python开发之个微机器人的二次开发

简要描述&#xff1a; 添加标签 请求URL&#xff1a; http://域名地址/addContactLabel 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明…

快解析内网穿透如何帮你轻松实现外网远程连接?

外网相信大家多少了解一点&#xff0c;其实就是连接不同地区局域网&#xff0c;或者是城域网计算机通信的远程网&#xff0c;因此被称为广域网或者公网。在这个互联网信息时代&#xff0c;很多用户还是不知道怎么连接外网&#xff1f;外网远程桌面连接的步骤是怎样的&#xff1…