当 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 之间的交互将在不久的将来得到极大的改善。
股票账户余额
10 月前
微信交易通知
所有脚本列表
1 年前
板块置顶 微信交易通知
数字货币移动平均线交叉
1 年前
微信交易通知
期货移动平均线交叉
1 年前
微信交易通知
股票移动平均线交叉
1 年前
微信交易通知
商品期货委托单
1 年前
微信交易通知
商品期货成交
1 年前
微信交易通知
商品期货持仓
1 年前
微信交易通知
商品期货余额
1 年前
微信交易通知
币安子账户余额
1 年前
微信交易通知
币安账户余额
1 年前
微信交易通知
币安合约仓位
1 年前
微信交易通知
搭建免费的量化交易可视化系统
1 年前
教程
脚本部署指南
1 年前
板块置顶 微信交易通知
如何安装 Miniforge Python 发行版
1 年前
教程