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


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

相关推荐
Dxy123931021613 分钟前
Python PDFplumber详解:从入门到精通的PDF处理指南
开发语言·python·pdf
在努力的韩小豪2 小时前
如何从0开始构建自己的第一个AI应用?(Prompt工程、Agent自定义、Tuning)
人工智能·python·llm·prompt·agent·ai应用·mcp
Otaku love travel3 小时前
实施运维文档
运维·windows·python
测试老哥3 小时前
软件测试之单元测试
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
presenttttt4 小时前
用Python和OpenCV从零搭建一个完整的双目视觉系统(六 最终篇)
开发语言·python·opencv·计算机视觉
测试19985 小时前
软件测试之压力测试总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
李昊哲小课6 小时前
销售数据可视化分析项目
python·信息可视化·数据分析·matplotlib·数据可视化·seaborn
烛阴6 小时前
带参数的Python装饰器原来这么简单,5分钟彻底掌握!
前端·python
全干engineer6 小时前
Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
后端·python·flask·web
nightunderblackcat6 小时前
新手向:Python网络编程,搭建简易HTTP服务器
网络·python·http