一尘不染

venv、pyvenv、pyenv、virtualenv、virtualenvwrapper、pipenv 等有什么区别?

javascript

Python 3.3 在其标准库中包含了新包venv. 它有什么作用,它与似乎与正则表达式匹配的所有其他软件包有何不同(py)?(v|virtual|pip)?env


阅读 193

收藏
2022-02-21

共1个答案

一尘不染

从学习virtualenv和开始pip,这些工具适用于 Python 2 和 3 以及在各种情况下,一旦你开始需要其他工具,就开始使用它们。

现在回答这个问题:这些类似命名的事物之间有什么区别:venv、virtualenv 等?

PyPI 包不在标准库中:

  • virtualenv是一个非常流行的工具,可以为 Python 库创建隔离的 Python 环境。如果您不熟悉此工具,我强烈建议您学习它,因为它是一个非常有用的工具。

它的工作原理是在一个目录中安装一堆文件(例如:)env/,然后修改PATH环境变量以使用自定义bin目录作为前缀(例如:)env/bin/python或二进制文件的精确副本python3放置在此目录中,但 Python 被编程为首先在环境目录中查找与其路径相关的库。它不是 Python 标准库的一部分,但受到 PyPA(Python 打包机构)的正式祝福。激活后,您可以使用pip.

  • pyenv用于隔离 Python 版本。例如,您可能希望针对 Python 2.7、3.6、3.7 和 3.8 测试您的代码,因此您需要一种在它们之间切换的方法。一旦激活,它会在PATH环境变量前面加上~/.pyenv/shims,其中有与 Python 命令 ( python, pip) 匹配的特殊文件。这些不是 Python 提供的命令的副本;PYENV_VERSION它们是特殊脚本,可以根据环境变量、.python-version文件或文件即时决定运行哪个版本的 Python ~/.pyenv/versionpyenv还可以使用命令来简化下载和安装多个 Python 版本的过程pyenv install

  • pyenv-virtualenvpyenv是同作者的一个插件pyenv,让你在方便使用pyenvvirtualenv同时。但是,如果您使用的是 Python 3.3 或更高版本,pyenv-virtualenv将尝试运行python -m venv(如果可用),而不是virtualenv. 如果您不想要便利功能,您可以在没有的情况下使用virtualenvand 。pyenv``pyenv-virtualenv

  • virtualenvwrapper是一组扩展virtualenv(请参阅文档)。它为您提供诸如 、 之类的命令mkvirtualenvlssitepackages尤其是用于在不同目录workon之间切换的命令。如果您需要多个目录,virtualenv此工具特别有用。virtualenv

  • pyenv-virtualenvwrapperpyenv是同作者的一个插件pyenv,方便集成virtualenvwrapperpyenv.

  • pipenv旨在将Pipfile,pip和组合virtualenv成命令行上的一个命令。该virtualenv目录通常放置在 中~/.local/share/virtualenvs/XXXXXX是项目目录路径的哈希。这与 不同virtualenv,其中目录通常位于当前工作目录中。pipenv用于开发 Python 应用程序(而不是库)。有一些替代品pipenv,例如poetry,我不会在这里列出,因为这个问题只是关于名称相似的包。

标准库:

  • pyvenv(不要与上一节混淆pyenv)是 Python 3 附带的脚本,但在 Python 3.6 中已弃用,因为它有问题(更不用说令人困惑的名称)。在 Python 3.6+ 中,确切的等价物是python3 -m venv.
  • venv是 Python 3 附带的一个包,您可以使用它来运行它python3 -m venv(尽管出于某种原因,一些发行版将其分离到一个单独的发行版包中,例如python3-venv在 Ubuntu/Debian 上)。它的用途与 相同virtualenv,但仅具有其功能的子集(请参见此处的比较)。virtualenv继续比 更受欢迎venv,尤其是因为前者同时支持 Python 2 和 3。
2022-02-21