• 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需求的文件导出或创建环境

  • 相关阅读:
    10条Python 超实用小技巧,建议先收藏
    rancher部署nginx服务
    商品销售管理系统java+mysql
    【LeetCode】160. 相交链表
    Java进阶教程(一)关键字
    前端实现水印效果的多种方案
    国家开放大学 模拟试题 训练
    PMP考试敏捷占比有多少?解疑
    【K8S系列】第七讲:有状态服务 VS 无状态服务
    Python爬虫入门
  • 原文地址:https://blog.csdn.net/weixin_45277161/article/details/132740359