作为一个 Python 新手,这个问题让我无休止地感到沮丧,并让我困惑了几个月。当我知道我将在未来几年内使用它时,我应该投资学习哪个虚拟环境和包管理器?
回答这个棘手问题的最佳文章是 Jake Vanderplas 的 https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/。尽管已有几年历史,但它提供了实用的答案以及 Python 包和虚拟环境管理器在这些最先进技术的发展过程中的历史。
在数据科学和“大数据云计算”社区中,我特别沮丧,因为 conda 被广泛用作 Python 和 JavaScript、SQL、Java、HTML5 和 Jupyter 的虚拟环境管理器和全功能包管理器笔记本。
那么为什么要使用 pip,当 conda 完成 pip 和 venv 变体所做的所有事情时?
答案是,“因为如果 conda 包根本不可用,您必须使用 pip。”很多时候,所需的包仅以 pip 格式提供,没有简单的解决方案,只能使用 pip。你可以学习使用conda build,但是如果你不是包维护者,那么你必须说服包所有者为每个新版本生成一个 conda 包(或者自己做。)
这些基于 pip 的软件包在许多重要且实用的方面有所不同:
- 稳定性
- 成熟度
- 复杂性
- 积极支持(相对于死亡或死亡)
- Python 生态系统“核心”与“在
边缘”(即,集成到 Python.org 发行版中)
- 易于理解和使用(适合初学者)
我会从包成熟度和稳定性两个维度来回答你的问题。
venv 和 virtualenv 是最成熟、最稳定、最受社区支持的。从在线文档中,您可以看到 virtualenv 截至今天的版本为 20.x。 virtualenv
virtualenv 是一个创建隔离 Python 环境的工具。自从
Python 3.3,它的一个子集已集成到标准中
venv 模块下的库。 venv 模块不提供所有
这个库的特点,仅举几个比较突出的:
is slower (by not having the app-data seed method),
is not as extendable,
cannot create virtual environments for arbitrarily installed python versions (and automatically discover these),
is not upgrade-able via pip,
does not have as rich programmatic API (describe virtual environments without creating them).
virtualenvwrapper 是一组帮助人们使用 virtualenv 的脚本(它是一个维护不善的“包装器”,它的最后一次更新是在 2019 年。virtualenvwrapper
我的建议是尽可能避免使用所有 pip 虚拟环境。改用 conda。 Conda 提供了一种统一的方法。它由专业的开源开发人员团队维护,并有一家信誉良好的公司提供资金和商业支持的版本。相比之下,维护 pip、venv、virtualenv、pipenv 和许多其他 pip 变体的团队资源有限。 pip 虚拟环境的多样性对于初学者来说是令人沮丧的。基于 pip 的虚拟环境工具的复杂性、碎片化、边缘和不受支持的包以及极其不一致的支持促使我使用 conda。对于数据科学工作,我的建议是在 conda 包不存在时使用基于 pip 的虚拟环境管理器作为最后的手段。
venv 变体之间的差异仍然让我感到害怕,因为我的时间有限,无法学习新的包。 pipenv、venv、pyvenv、pyenv、virtualenv、virtualenvwrapper、诗歌和其他有几十个差异和复杂性,需要几天时间才能理解。我讨厌走上一条路,当维护者辞职(或太忙而无法维护它)时,对一个包的支持就会崩溃。我只需要完成我的工作。
本着乐于助人的精神,这里有一些链接可以帮助您深入了解,但不要迷失在但丁的地狱(re:pip)中。
A Guide to Python’s Virtual Environments
选择“核心”Python 包来投资于你的职业生涯(长期),而不是短期完成工作)很重要。但是,这是一个业务分析问题。您是想简单地完成一项任务,还是一个专业的软件工程师构建可扩展的高性能系统,随着时间的推移需要最少的维护工作量?恕我直言,conda 比处理 pip-plurality 问题更容易将您带到后者。 conda 仍然缺少 1 步 pip-package 迁移工具,这使得这成为一个没有实际意义的问题。如果我们可以简单地将 pip 包转换为 conda 包,那么 pypi.org 和 conda-forge 可以合并。 Pip 是必要的,因为 conda 包(还)不是通用的。许多 Python 程序员要么懒得创建 conda 包,要么只用 Python 编程,不需要 conda 的语言无关/多语言支持。
conda 对我来说是天赐之物,因为它支持云软件工程和数据科学对 JavaScript、SQL 和 Jupyter Notebook 扩展的多语言支持的需求,并且 conda 在 Docker 和其他云原生环境中运行良好。我鼓励您学习和掌握 conda,这将使您能够回避许多基于 pip 的工具可能永远无法回答的复杂问题。
保持简单!我需要一个包来完成我需要的 90% 的工作,并为剩下的 10% 的边缘情况提供指导和解决方法。
查看此处链接的文章,了解有关基于 pip 的虚拟环境的更多信息。
我希望这对原始海报有所帮助,并让 pip 和 conda 爱好者有所思考。