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

Python 3.3在其标准库中包含了新的包venv 。 它是做什么的,它与所有其他包似乎与正则expression式匹配(py)?(v|virtual|pip)?env

PyPI包不在标准库中:

  • virtualenv是一个非常stream行的工具,为Python库创build独立的Python环境。 如果你不熟悉这个工具,我强烈build议你学习它,因为它是一个非常有用的工具,我将对这个答案的其余部分进行比较。

    它通过在一个目录(例如: env/ )中安装一堆文件,然后修改PATH环境variables来为自定义bin目录(例如: env/bin/ )添加前缀。 pythonpython3二进制文件的精确拷贝被放置在这个目录中,但Python被编程为首先在环境目录中查找相对于其path的库。 它不是Python标准库的一部分,但是被PyPA(Python Packaging Authority)正式祝福。 一旦激活,您可以使用pip在虚拟环境中安装软件包。

  • pyenv用于隔离Python版本。 例如,您可能想要针对Python 2.6,2.7,3.3,3.4和3.5testing您的代码,因此您需要在它们之间切换的方法。 一旦激活,它就会在PATH环境variables前加上~/.pyenv/shims ,其中有一些与Python命令匹配的特殊文件( pythonpip )。 这些不是Python提供的命令的副本; 它们是根据PYENV_VERSION环境variables或.python-version文件或~/.pyenv/version文件决定运行哪个版本的Python的特殊脚本。 pyenv也使下载和安装多个Python版本的过程变得更简单,使用命令pyenv install

  • pyenv-virtualenvpyenv-virtualenv一个插件,和pyenv一样,允许你在同一时间方便地使用pyenvvirtualenv 。 但是,如果您使用Python 3.3或更高版本,则pyenv-virtualenv会尝试运行python -m venv如果可用),而不是virtualenv 。 如果您不想使用便利function,则可以不使用pyenv-virtualenv一起使用virtualenvpyenv

  • virtualenvwrappervirtualenvwrapper的一组扩展(参见文档 )。 它提供了像mkvirtualenvlssitepackages这样的命令,特别是在不同的virtualenv目录之间切换的工作。 如果你想要多个virtualenv目录,这个工具特别有用。

  • pyenv-virtualenvwrapperpyenv-virtualenvwrapper一个插件,和pyenv一样,可以方便地将virtualenvwrapper集成到pyenv

  • pipenv Reitz( requests )的pipenv是这个列表中的最新项目。 它的目标是在命令行中将Pipfile,pip和virtualenv合并为一个命令。

标准库:

  • pyvenv是一个Python 3附带的脚本,但在Python 3.6中被弃用,因为它有问题(更不用说混淆的名字)。 在Python 3.6+中,确切的等价物是python3 -m venv

  • venv是Python 3的一个包,你可以使用python3 -m venv运行(虽然由于某些原因,一些发行版把它分离成一个单独的发行包,比如Ubuntu / Debian上的python3-venv )。 它的作用与virtualenv相似,工作方式非常相似,但不需要复制Python二进制文件(除了Windows)。 如果你不需要支持Python 2,可以使用它。在撰写本文时,Python社区似乎对virtualenv感到满意,而且我还没有听说过venv