我最近学习了如何在我的工作流程中使用 virtualenv 和 virtualenvwrapper,但是我在一些指南中看到了 pyenv,但我似乎无法理解 pyenv 是什么以及它与 virtualenv 的不同/相似之处。pyenv 是 virtualenv 的更好/更新的替代品还是免费工具?如果后者有什么不同,两者(如果适用,还有 virtualenvwrapper)如何协同工作?
Pyenv 和 virtualenv 是非常不同的工具,它们以不同的方式工作以做不同的事情:
Pyenv 是一个 bash 扩展——在 Windows 上不起作用——它会拦截你对 python、pip 等的调用,以将它们定向到几个系统 python 工具链之一。因此,您始终可以使用在所选 python 版本中安装的所有库 - 因此,这对于必须在不同 python 版本之间切换的用户来说是件好事。
VirtualEnv 是纯python,因此可以在任何地方使用,它会复制( 可选)特定版本的 python 和 pip 本地到激活环境,可能包含也可能不包含指向当前系统工具链的链接,如果它不包含,您可以仅将已知的库子集安装到该环境中。因此,几乎可以肯定它对于测试和部署要好得多,因为您 确切地 知道使用了哪些库、哪些版本,并且全局更改不会影响您的模块。
请注意,从 Python 3.3 开始,有一个名为 venv 的 VirtualEnv 的内置实现(在某些安装中,有一个名为 pyvenv 的包装器 - 此包装器在 Python 3.6 中已弃用),可能应该优先使用它。为了避免包装器可能出现的问题,直接使用它通常是一个好主意,/path/to/python3 -m venv desired/env/path或者您可以py在带有py -3 -m venv desired/env/path. 它将创建用desired/env/pathconfigure 指定的目录并适当地填充它。一般来说,它非常类似于使用 VirtualEnv。
/path/to/python3 -m venv desired/env/path
py
py -3 -m venv desired/env/path
desired/env/path
有许多工具值得一提和考虑,因为它们可以帮助使用上述一种或多种工具: