Python venv、pyvenv、pyenv、virtualenv、VirtualEnvRapper、pipenv等之间的区别是什么?

Python venv、pyvenv、pyenv、virtualenv、VirtualEnvRapper、pipenv等之间的区别是什么?,python,virtualenv,virtualenvwrapper,pyenv,python-venv,Python,Virtualenv,Virtualenvwrapper,Pyenv,Python Venv,Python 3.3在其标准库中包含了新的包venv。它的功能是什么?它与所有其他似乎与regex(py)?(v|virtual | pip)?env?初学者建议: 这是我给初学者的个人建议:从学习和使用Python 2和Python 3以及在各种情况下都能使用的工具开始,一旦开始需要其他工具,就学习它们 不在标准库中的PyPI包: 是一个非常流行的工具,它为Python库创建隔离的Python环境。如果您不熟悉这个工具,我强烈建议您学习它,因为它是一个非常有用的工具,在本答案的其余部分,我将

Python 3.3在其标准库中包含了新的包
venv
。它的功能是什么?它与所有其他似乎与regex
(py)?(v|virtual | pip)?env

初学者建议: 这是我给初学者的个人建议:从学习和使用Python 2和Python 3以及在各种情况下都能使用的工具开始,一旦开始需要其他工具,就学习它们

不在标准库中的PyPI包:
  • 是一个非常流行的工具,它为Python库创建隔离的Python环境。如果您不熟悉这个工具,我强烈建议您学习它,因为它是一个非常有用的工具,在本答案的其余部分,我将与它进行比较
它的工作原理是在一个目录中安装一组文件(例如:
env/
),然后修改
PATH
环境变量,以自定义
bin
目录作为前缀(例如:
env/bin/
)。
python
python3
二进制文件的精确副本放在这个目录中,但是python被编程为首先在环境目录中查找与其路径相关的库。它不是Python标准库的一部分,但是PyPA(Python打包机构)正式支持它。激活后,您可以使用
pip
在虚拟环境中安装软件包

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

  • 是与
    pyenv
    同一作者开发的
    pyenv
    插件,允许您方便地同时使用
    pyenv
    virtualenv
    。但是,如果您使用的是Python 3.3或更高版本,
    pyenv virtualenv
    将尝试运行
    Python-m venv
    (如果可用),而不是
    virtualenv
    。如果您不想要方便的功能,您可以同时使用
    virtualenv
    pyenv
    ,而不使用
    pyenv virtualenv

  • 是对
    virtualenv
    的一组扩展(请参阅)。它为您提供了类似于
    mkvirtualenv
    lssitepackages
    ,尤其是
    workon
    的命令,用于在不同的
    virtualenv
    目录之间切换。如果需要多个
    virtualenv
    目录,此工具尤其有用

  • 是与
    pyenv
    相同的作者为
    pyenv
    开发的插件,可以方便地将
    virtualnvwrapper
    集成到
    pyenv

  • 旨在将
    Pipfile
    pip
    virtualenv
    组合到命令行上的一个命令中。
    virtualenv
    目录通常位于
    ~/.local/share/virtualenvs/XXX
    中,其中
    XXX
    是项目目录路径的散列。这与
    virtualenv
    不同,后者的目录通常位于当前工作目录中
    pipenv
    用于开发Python应用程序(与库相反)。除了
    pipenv
    ,还有其他选择,例如
    poetry
    ,我在这里不列出这些选择,因为这个问题只是关于名称类似的包

标准库:
  • pyvenv
    是Python3附带的一个脚本,但它有一些问题(更不用说令人困惑的名称了)。在python3.6+中,确切的等价物是
    python3-mvenv

  • 是Python 3附带的一个包,您可以使用
    python3-m-venv
    运行该包(尽管出于某种原因,一些发行版将其分离到单独的发行版包中,例如Ubuntu/Debian上的
    python3-venv
    )。它的用途与
    virtualenv
    相同,但只有一部分功能()
    virtualenv
    仍然比
    venv
    更受欢迎,特别是因为前者同时支持python2和python3


我会在Python3.3+之后避免使用
virtualenv
,而是使用标准的附带库
venv
。要创建新的虚拟环境,请键入:

$ python3 -m venv <MYVENV>  
因此,我会避免使用
virtualnvwrapper
pipenv
pyvenv
已被弃用
pyenv
似乎经常在使用
virtualenv
的地方使用,但我也会远离它,因为我认为
venv
也做
pyenv
构建的目的

venv
在shell中创建全新的沙盒虚拟环境,具有用户可安装的库,并且是多python安全的。新鲜因为虚拟环境只从python附带的标准库开始,所以在虚拟环境处于活动状态时,您必须使用
pip install
重新安装任何其他库。沙盒,因为这些新的库安装在虚拟环境之外都不可见,所以您可以删除整个环境并重新启动,而无需重新启动
$ otool -L bin/python
python:
    @executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
pyenv local 3.9.0  # to prevent 'interpreter not found' in mkvirtualenv
python -m pip install --upgrade pip setuptools wheel
mkvirtualenv <venvname> -p python3.9 -a <workingdir>
workon <venvname>
python -m pip install --upgrade pip setuptools wheel pipenv
pipenv install -r requirements.txt
pipenv install
poetry add <package>   # install single package
poetry remove <package>
poetry install   # if you remove poetry.lock poetry will re-calculate versions