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/
)添加前缀。python
或python3
二进制文件的精确拷贝被放置在这个目录中,但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命令匹配的特殊文件(python
,pip
)。 这些不是Python提供的命令的副本; 它们是根据PYENV_VERSION
环境variables或.python-version
文件或~/.pyenv/version
文件决定运行哪个版本的Python的特殊脚本。pyenv
也使下载和安装多个Python版本的过程变得更简单,使用命令pyenv install
。 -
pyenv-virtualenv
是pyenv-virtualenv
一个插件,和pyenv
一样,允许你在同一时间方便地使用pyenv
和virtualenv
。 但是,如果您使用Python 3.3或更高版本,则pyenv-virtualenv
会尝试运行python -m venv
如果可用),而不是virtualenv
。 如果您不想使用便利function,则可以不使用pyenv-virtualenv
一起使用virtualenv
和pyenv
。 -
virtualenvwrapper
是virtualenvwrapper
的一组扩展(参见文档 )。 它提供了像mkvirtualenv
,lssitepackages
这样的命令,特别是在不同的virtualenv
目录之间切换的工作。 如果你想要多个virtualenv
目录,这个工具特别有用。 -
pyenv-virtualenvwrapper
是pyenv-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
。