venv,pyvenv,pyenv,virtualenv,virtualenvwrapper,pipenv等有什么区别?标准库中没有的 PyPI 包:标准库:
Python 3.3在其标准库中包含了新的包。它有什么作用,它与与正则表达式匹配的所有其他软件包有何不同?venv
(py)?(v|virtual|pip)?env
Python 3.3在其标准库中包含了新的包。它有什么作用,它与与正则表达式匹配的所有其他软件包有何不同?venv
(py)?(v|virtual|pip)?env
这是我个人对初学者的建议:从学习virtualenv
和pip
开始,这些工具可以与Python 2和3一起使用,并且在各种情况下都可以使用,并在开始需要它们时选择其他工具。
现在来回答这个问题:这些被虚构命名的东西有什么区别:venv,virtualenv等?
virtualenv
是一个非常流行的工具,它为Python库创建隔离的Python环境。如果您不熟悉此工具,我强烈建议您学习它,因为它是一个非常有用的工具。
它的工作原理是在目录中安装一堆文件(例如:),然后修改环境变量以在其前面加上自定义目录(例如:)。或二进制文件的精确副本被放置在此目录中,但Python被编程为首先在环境目录中查找相对于其路径的库。它不是Python标准库的一部分,但得到了PyPA(Python打包管理局)的正式祝福。激活后,您可以使用 在虚拟环境中安装软件包。env/
PATH
bin
env/bin/
python
python3
pip
pyenv
用于隔离Python版本。例如,您可能希望针对 Python 2.7、3.6、3.7 和 3.8 测试代码,因此您需要一种在它们之间切换的方法。激活后,它会在环境变量前面加上 前缀,其中有与 Python 命令 (, ) 匹配的特殊文件。这些不是Python附带的命令的副本;它们是特殊的脚本,可以根据环境变量、文件或文件动态决定运行哪个版本的 Python。 还使下载和安装多个Python版本的过程更加容易,使用命令。PATH
~/.pyenv/shims
python
pip
PYENV_VERSION
.python-version
~/.pyenv/version
pyenv
pyenv install
pyenv-virtualenv
是一个由 同一作者提供的插件,允许您同时方便地使用。但是,如果您使用的是 Python 3.3 或更高版本,则会尝试运行(如果可用),而不是 .如果您不想要便利功能,则可以在没有 的情况下一起使用 和 一起使用。pyenv
pyenv
pyenv
virtualenv
pyenv-virtualenv
python -m venv
virtualenv
virtualenv
pyenv
pyenv-virtualenv
virtualenvwrapper
是一组扩展(参见 docs)。它为您提供了像 、 这样的命令,特别是用于在不同目录之间切换。如果您想要多个目录,此工具特别有用。virtualenv
mkvirtualenv
lssitepackages
workon
virtualenv
virtualenv
pyenv-virtualenvwrapper
是一个插件,由同一作者提供,用于方便地集成到 .pyenv
pyenv
virtualenvwrapper
pyenv
pipenv
旨在将 , 并组合成一个命令行命令。该目录通常被放置在 中,是项目目录路径的哈希值。这与 不同,在 当前工作目录中,目录通常位于 当前工作目录中。 旨在开发Python应用程序(而不是库)时使用。有 替代方法,例如 ,我不会在这里列出,因为这个问题只是关于名称相似的包。Pipfile
pip
virtualenv
virtualenv
~/.local/share/virtualenvs/XXX
XXX
virtualenv
pipenv
pipenv
poetry
pyvenv
(不要与上一节中的pyenv
混淆)是Python 3.3到3.7附带的脚本。它从Python 3.8中删除,因为它有问题(更不用说令人困惑的名称了)。运行具有与 完全相同的效果。python3 -m venv
pyvenv
venv
是Python 3附带的软件包,您可以使用它运行(尽管由于某种原因,一些发行版将其分离到一个单独的发行版包中,例如在Ubuntu / Debian上)。它的用途与 相同,但只有其功能的子集(请参阅此处的比较)。 继续比 更受欢迎,特别是因为前者同时支持 Python 2 和 3。python3 -m venv
python3-venv
virtualenv
virtualenv
venv
我只是避免使用Python3.3 +之后,而是使用标准附带的库。要创建新的虚拟环境,请键入:virtualenv
venv
$ python3 -m venv <MYVENV>
virtualenv
尝试将 Python 二进制文件复制到虚拟环境的 bin 目录中。但是,它不会更新嵌入到该二进制文件中的库文件链接,因此,如果将 Python 从源代码构建到具有相对路径名的非系统目录中,则 Python 二进制文件会中断。由于这是你如何制作一个可复制的可分发Python,这是一个很大的缺陷。顺便说一句,要检查OS X上的嵌入式库文件链接,请使用.例如,在虚拟环境中,键入:otool
$ 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)
因此,我会避免和. 已弃用。 似乎经常在使用的地方使用,但我会远离它,因为我认为也做了为之而构建的东西。virtualenvwrapper
pipenv
pyvenv
pyenv
virtualenv
venv
pyenv
venv
在 shell 中创建全新的沙盒虚拟环境,具有用户可安装的库,并且它是多 python 安全的。
新鲜:由于虚拟环境仅从python附带的标准库开始,因此您必须在虚拟环境处于活动状态时重新安装任何其他库。pip install
沙盒化:因为这些新库安装在虚拟环境之外都不可见,因此您可以删除整个环境并重新开始,而不必担心影响基本python安装。
用户可安装的库:由于虚拟环境的目标文件夹是在您已经拥有的某个目录中创建的,因此您不需要将库安装到其中的权限。sudo
sudo
多python安全:因为当虚拟环境激活时,shell只能看到用于构建该虚拟环境的python版本(3.4,3.5等)。
pyenv
类似于它允许您管理多个python环境。但是,您无法方便地将库安装回滚到某些启动状态,并且您可能需要在某些时候具有更新库的权限。所以我认为最好使用.venv
pyenv
admin
venv
在过去的几年中,我发现构建系统(emacs包,python独立应用程序构建器,安装程序等)中存在许多问题,这些问题最终归结为.我认为当我们消除这个额外的选项并仅使用时,python将是一个更好的平台。virtualenv
venv
编辑:BDFL的推文,
我使用venv(在stdlib中)和一堆shell别名来快速切换。
—圭多·范·罗苏姆(@gvanrossum)2020年10月22日