首页 > Python > venv、pyvenv、pyenv、virtualenv、virtualenvwrapper、pipenv 等有什么区别?

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

上一篇 下一篇

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

分割线

网友回答:

我只是避免使用 Python3.3+ 之后,而是使用标准附带的库。要创建新的虚拟环境,您需要键入:virtualenvvenv

$ 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)

因此,我会避免和. 已弃用。 似乎经常在使用的地方使用,但我也会远离它,因为我认为也做了构建的目的。virtualenvwrapperpipenvpyvenvpyenvvirtualenvvenvpyenv

venv在 shell 中创建新鲜沙盒化的虚拟环境,具有用户可安装的库,并且是多 Python 安全的

新鲜:由于虚拟环境仅从 python 附带的标准库开始,因此您必须在虚拟环境处于活动状态时重新安装任何其他库。pip install

沙盒:由于这些新库安装都不在虚拟环境之外可见,因此您可以删除整个环境并重新开始,而不必担心影响基本 python 安装。

用户可安装的库:因为虚拟环境的目标文件夹是在你已经拥有的某个目录中创建的,所以你不需要将库安装到其中的权限。sudosudo

多 Python 安全:因为当虚拟环境激活时,shell 只能看到用于构建该虚拟环境的 Python 版本(3.4、3.5 等)。

pyenv类似于它允许您管理多个 Python 环境。但是,您无法方便地将库安装回滚到某个启动状态,并且在某些时候您可能需要权限来更新库。所以我认为最好使用.venvpyenvadminvenv

在过去的几年里,我在构建系统(emacs软件包,python独立应用程序构建器,安装程序……)中发现了许多问题,这些问题最终归结为.我认为当我们消除这个附加选项并仅使用 .virtualenvvenv

编辑:BDFL的推文,

我使用 venv(在 stdlib 中)和一堆 shell 别名来快速切换。

— 圭多·范罗苏姆 (@gvanrossum) 22 年 2020 月 <> 日

分割线

网友回答:

这是我个人对初学者的建议:从学习和开始,这些工具可以与Python 2和3一起使用,并且可以在各种情况下使用,一旦您开始需要它们,就可以选择其他工具。virtualenvpip

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

不在标准库中的 PyPI 软件包:

  • virtualenv 是一个非常流行的工具,它为 Python 库创建隔离的 Python 环境。如果您不熟悉此工具,我强烈建议您学习它,因为它是一个非常有用的工具。它的工作原理是在目录中安装一堆文件(例如:),然后修改环境变量以在其前面加上自定义目录(例如:)。或二进制文件的精确副本放置在此目录中,但 Python 被编程为首先在环境目录中查找相对于其路径的库。它不是Python标准库的一部分,但得到了PyPA(Python打包管理局)的正式祝福。激活后,您可以使用 在虚拟环境中安装软件包。env/PATHbinenv/bin/pythonpython3pip
  • pyenv 用于隔离 Python 版本。例如,您可能希望针对 Python 2.7、3.6、3.7 和 3.8 测试您的代码,因此您需要一种在它们之间切换的方法。激活后,它会在环境变量前面加上 ,其中有与 Python 命令 (, ) 匹配的特殊文件。这些不是 Python 提供的命令的副本;它们是特殊的脚本,可以根据环境变量、文件或文件动态决定运行哪个版本的 Python。 还使用命令使下载和安装多个 Python 版本的过程更容易。PATH~/.pyenv/shimspythonpipPYENV_VERSION.python-version~/.pyenv/versionpyenvpyenv install
  • pyenv-virtualenv 是一个插件,由与 相同的作者提供,允许您同时方便地使用。但是,如果您使用的是 Python 3.3 或更高版本,将尝试运行(如果可用),而不是 .如果您不想要便利功能,则可以在没有 的情况下一起使用和一起使用。pyenvpyenvpyenvvirtualenvpyenv-virtualenvpython -m venvvirtualenvvirtualenvpyenvpyenv-virtualenv
  • virtualenvwrapper 是一组扩展(参见文档)。它为您提供了类似 、 的命令,尤其是在不同目录之间切换时。如果您需要多个目录,此工具特别有用。virtualenvmkvirtualenvlssitepackagesworkonvirtualenvvirtualenv
  • pyenv-virtualenvwrapper 是一个插件,由与 相同的作者提供,可以方便地集成到 中。pyenvpyenvvirtualenvwrapperpyenv
  • Piphenv旨在将 和 组合成命令行上的一个命令。该目录通常放置在 中,是项目目录路径的哈希。这与 不同,在 中,目录通常位于当前工作目录中。 旨在用于开发 Python 应用程序(而不是库)。有 的替代方案,例如 ,我不会在这里列出,因为这个问题只是关于名称相似的包。Pipfilepipvirtualenvvirtualenv~/.local/share/virtualenvs/XXXXXXvirtualenvpipenvpipenvpoetry

标准库:

  • pyvenv(不要与上一节中的pyenv混淆)是Python 3.3到3.7附带的脚本。它从Python 3.8中删除,因为它有问题(更不用说令人困惑的名称了)。跑步的效果与 完全相同。python3 -m venvpyvenv
  • venv 是 Python 3 附带的软件包,您可以使用它运行(尽管出于某种原因,一些发行版将其分离到一个单独的发行版包中,例如在 Ubuntu/Debian 上)。它的作用与 相同,但只有其功能的一个子集(请参阅此处的比较)。 继续比 更受欢迎,特别是因为前者同时支持 Python 2 和 3。python3 -m venvpython3-venvvirtualenvvirtualenvvenv

分割线

网友回答:

更新20200825:

在“结论”段落下方增加

我已经进入了兔子洞(这确实是一个又深又黑的洞……),由于最后一个答案是 2 年前,我觉得用我发现的 Python 虚拟信封主题的最新发展来更新讨论很有用。pipenv

免責聲明:

这个答案不是关于继续关于pipenvvenv作为信封解决方案的优点的激烈辩论 – 我不认可任何一个。这是关于 PyPA 认可相互冲突的标准,以及 virtualenv 的未来发展如何承诺否定在它们之间做出非此即彼的选择。我之所以专注于这两个工具,正是因为它们是 PyPA 的受膏工具。

文夫

正如OP所指出的,venv是一种用于虚拟化环境的工具。不是第三方解决方案,而是本机工具。PyPA支持venv创建虚拟信封:“在3.5版本中更改:现在建议使用venv来创建虚拟环境”。

派普恩夫

Piphenv(与Venv一样)可用于创建虚拟信封,但还可以使用滚动包管理和漏洞检查功能。而不是使用 ,通过 Pipfile 提供包管理。由于 PyPA 认可 pipenv 用于包管理,这似乎意味着要取代 .requirements.txtpipenvpipfilerequirements.txt

但是pipenv 使用 virtualenv 作为创建虚拟信封的工具,而不是 venv,后者被 PyPA 认可为创建虚拟信封的首选工具。

相互冲突的标准:

因此,如果确定虚拟信封解决方案还不够困难,我们现在让 PyPA 支持两种使用不同虚拟信封解决方案的不同工具。关于 venv vs virtualenv 的激烈 Github 辩论突出了这一冲突,可以在这里找到。

冲突解决:

上面链接中引用的 Github 辩论已经将 virtualenv 的开发引向了在未来版本中适应 venv 的方向:

首选内置 venv:如果目标 Python 有 venv,我们将使用它创建
环境(然后对其执行后续操作
以促进我们提供的其他保证)

结论:

因此,看起来两个竞争对手的虚拟包络解决方案之间将来会有一些融合,但截至目前,pipenv(使用)与 .virtualenvvenv

鉴于pipenv解决的问题以及PyPA给予祝福的事实,它似乎有一个光明的未来。如果virtualenv实现了其提出的开发目标,那么选择虚拟信封解决方案就不再是pipenvvenv的情况。

更新20200825

在进行这种分析时,我经常看到对皮彭夫的反复批评是它没有得到积极的维护。事实上,使用一个由于缺乏持续开发而未来可能被视为可疑的解决方案有什么意义?经过大约18个月的干旱期,Pipenv再次被积极开发。事实上,此后已经发布了大型和材料更新。

模板简介:该模板名称为【venv、pyvenv、pyenv、virtualenv、virtualenvwrapper、pipenv 等有什么区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 291次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-21
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
自适应 微信模板 微信素材 微信图片 html5 微信公众平台 单页式简历模板 企业网站 响应式 微信文章
您可能会喜欢的其他模板