在 CONDA 环境中独占使用 PIP 有哪些陷阱?
What are the pitfalls of exclusively using PIP in a CONDA environment?
背景
同一网站的官方documentation and this blog - 建议使用conda
安装尽可能多的需求,然后使用pip。显然这是因为 conda
将不知道 pip
对依赖项所做的任何更改,因此将无法正确解析依赖项。
问题
现在,如果一个人只使用 pip
并且不使用 conda
安装任何东西,那么期望 conda
似乎不需要知道 [= 所做的任何更改似乎是合理的12=] - 因为 conda
实际上成为隔离依赖项和管理版本的单纯工具。然而,这违背了官方的建议,因为人们不会 安装尽可能多的要求 conda
。
所以问题仍然存在:是否有任何已知的缺点 在 conda
中使用 pip
环境?
相似主题
中的类似主题已在 中触及,但未涵盖在 [=10= 中专门使用 pip
的情况] 环境。我也来过这里:
- What is the difference between pip and conda?
不确定是否可以对此给出全面的答案,但我想到的一些主要事情是:
缺乏对非Python依赖解析的深度支持。虽然随着时间的推移,越来越多的捆绑非 Python 资源的轮子变得可用,但它远不及 Conda 作为通用包管理器而不是 Python 特定的包管理器提供的覆盖范围。对于任何进行互操作计算的人(例如,reticulate
),我希望 Conda 会受到青睐。
优化库。与第一点有点相关,但 Anaconda 团队已经努力构建优化版本的包(例如,numpy
的 MKL)。不确定是否可以通过 PyPI 获得等效项。1
跨环境的冗余冗余。当包和环境位于同一卷上时,Conda 使用硬链接,并支持跨卷的软链接。这有助于最大限度地减少复制安装在多个环境中的任何包。
使导出变得复杂。导出 (conda env export
) 时,Conda 不会选择所有 pip
安装的包 - 仅选择来自 PyPI 的包。也就是说,它会丢失从 GitHub 安装的东西,等等。如果确实采用 pip-only 路线,我认为更可靠的导出策略是使用 pip freeze > requirements.txt
,然后制作一个YAML 喜欢
channels:
- defaults
dependencies:
- python=3.8 # specify the version
- pip
- pip:
- -r requirements.txt
用来重建环境。
综上所述,我可以很容易地想象出 none 这些对某些人来说很重要(大多数是为了方便),尤其是那些倾向于纯粹在 Python 中工作的人。然而,在这种情况下,我不明白为什么不干脆完全放弃 Conda 并使用 Python 特定的虚拟环境管理器。
[1]有知道的请指正
背景
同一网站的官方documentation and this blog - 建议使用conda
安装尽可能多的需求,然后使用pip。显然这是因为 conda
将不知道 pip
对依赖项所做的任何更改,因此将无法正确解析依赖项。
问题
现在,如果一个人只使用 pip
并且不使用 conda
安装任何东西,那么期望 conda
似乎不需要知道 [= 所做的任何更改似乎是合理的12=] - 因为 conda
实际上成为隔离依赖项和管理版本的单纯工具。然而,这违背了官方的建议,因为人们不会 安装尽可能多的要求 conda
。
所以问题仍然存在:是否有任何已知的缺点 在 conda
中使用 pip
环境?
相似主题
中的类似主题已在 pip
的情况] 环境。我也来过这里:
- What is the difference between pip and conda?
不确定是否可以对此给出全面的答案,但我想到的一些主要事情是:
缺乏对非Python依赖解析的深度支持。虽然随着时间的推移,越来越多的捆绑非 Python 资源的轮子变得可用,但它远不及 Conda 作为通用包管理器而不是 Python 特定的包管理器提供的覆盖范围。对于任何进行互操作计算的人(例如,
reticulate
),我希望 Conda 会受到青睐。优化库。与第一点有点相关,但 Anaconda 团队已经努力构建优化版本的包(例如,
numpy
的 MKL)。不确定是否可以通过 PyPI 获得等效项。1跨环境的冗余冗余。当包和环境位于同一卷上时,Conda 使用硬链接,并支持跨卷的软链接。这有助于最大限度地减少复制安装在多个环境中的任何包。
使导出变得复杂。导出 (
conda env export
) 时,Conda 不会选择所有pip
安装的包 - 仅选择来自 PyPI 的包。也就是说,它会丢失从 GitHub 安装的东西,等等。如果确实采用 pip-only 路线,我认为更可靠的导出策略是使用pip freeze > requirements.txt
,然后制作一个YAML 喜欢channels: - defaults dependencies: - python=3.8 # specify the version - pip - pip: - -r requirements.txt
用来重建环境。
综上所述,我可以很容易地想象出 none 这些对某些人来说很重要(大多数是为了方便),尤其是那些倾向于纯粹在 Python 中工作的人。然而,在这种情况下,我不明白为什么不干脆完全放弃 Conda 并使用 Python 特定的虚拟环境管理器。
[1]有知道的请指正