当 conda 和 pip 一起使用来创建环境时,可能会出现问题,尤其是当工具多次交叉使用时,建立了难以重现的状态。这些问题大多数因为 conda 与其他包管理器一样,控制未安装的包的能力有限。在 pip 之后运行 conda 可能会覆盖并破坏 pip 安装的包。同样,pip 可能会升级或删除 conda 安装的软件包。有时这些破坏是表面的,留存了一些本应删除的文件;更糟的情况下,环境可能会变的不可用。
有几个步骤可以用来避免在一起使用 conda 和 pip 时破坏环境。一种万无一失的方法是仅使用 conda 包。如果需要的软件没有 conda 包,可以使用 conda build 为所述软件创建包。对于 PyPI 上的项目,conda skeleton 命令(conda-build 的一部分)生成一个 recipe,只需很少或无需修改,即可创建一个 conda 包。
为所有包创建 conda 包是安全可靠的办法,但如果涉及大量仅在 PyPI 上才有的包,可能会带来较大工作量。在这些情况下,只在通过 conda 安装满足要求后,才使用 pip 是最安全的做法。此外,pip 应该使用“–-upgrade-strategy only-if-needed”参数运行,以防止对 conda 安装的包进行了不必要地升级。only-if-needed 是运行 pip 时的默认设置,保持其默认即可。
如果期望同时使用 pip 和 conda 包安装软件,最好使用一个新的专门的 conda 环境中,以保护其他环境免受 pip 修改。conda 支持创建多个隔离环境,并可以在其中安装不同版本的包。在 conda 环境中,尽可能使用硬链接,而不是复制文件以节省空间。如果安装了一组类似的包,则每个新的 conda 环境只需要少量的额外磁盘空间。许多用户仅使用 conda 安装后的默认环境,如果此环境因 pip 和 conda 混用而变得混乱,则更难恢复。如果单独创建了 conda 环境,则后续可以轻松删除和重新创建环境,而不会影响其他功能。
使用 pip 将软件安装到 conda 环境中,conda 并不知道这些更改,并且后续可能会继续进行破坏性修改。与其运行 conda、运行 pip、运行 conda,不如先创建一个具有组合 conda 要求的新环境,然后再运行 pip,可以在删除旧环境之前测试此新环境。主要是 pip 的“状态性”导致了问题,由于软件包安装顺序而存在的状态越多,保持正常就越困难。
对于需求包固定的环境,最好将 conda 和 pip 包要求存储在文本文件中。包需求可以通过 --file 参数提供给 conda,通过 -r 提供给 pip。可以先导出一个同时包含 conda 和 pip 要求的文件,然后将其提供给 conda env 命令以创建环境。这样做的优点是,环境描述文件可以纳入版本管理系统并与其他人共享。
综上所述,在混用 conda 和 pip 时,最好使用隔离的 conda 环境。只有在使用 conda 安装了尽可能多的软件包后,才使用 pip 安装剩余的软件。如果需要对环境修改,最好创建一个新环境,而不是在运行 pip 之后运行 conda。方便的话,conda 和 pip 的包需求应存储在文本文件中。
我们意识到了将 pip 和 conda 结合起来的困难,所以我们一直在添加功能,以便让设置数据科学环境过程尽可能简单。conda 4.6.0 将允许 conda 考虑 pip 安装的软件包,并根据需要替换这些软件包,或满足对现有软件包的依赖关系。我们仍在测试这些新功能,但预计 conda 和 pip 之间的交互将在不久的将来得到极大的改善。
股票账户余额
8 月前
微信交易通知
所有脚本列表
11 月前
板块置顶 微信交易通知
数字货币移动平均线交叉
10 月前
微信交易通知
期货移动平均线交叉
10 月前
微信交易通知
股票移动平均线交叉
11 月前
微信交易通知
商品期货委托单
10 月前
微信交易通知
商品期货成交
10 月前
微信交易通知
商品期货持仓
10 月前
微信交易通知
商品期货余额
10 月前
微信交易通知
币安子账户余额
10 月前
微信交易通知
币安账户余额
10 月前
微信交易通知
币安合约仓位
10 月前
微信交易通知
搭建免费的量化交易可视化系统
1 年前
教程
脚本部署指南
11 月前
板块置顶 微信交易通知
如何安装 Miniforge Python 发行版
1 年前
教程