当前位置: 首页 > 知识库问答 >
问题:

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

艾安和
2023-03-14

Python3.3在其标准库中包含新的包venv。它是做什么的,它与似乎与regex(py)?(vvirtualpip)?env匹配的所有其他包有什么不同?

共有1个答案

东方权
2023-03-14

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

  • virtualenv是一个非常流行的工具,它为Python库创建独立的Python环境。如果您不熟悉此工具,我强烈建议您学习它,因为它是一个非常有用的工具,我将在本答案的其余部分与它进行比较。

它的工作方式是在一个目录(例如:env/)中安装一组文件,然后修改path环境变量,为其加上自定义bin目录(例如:env/bin/)。Pythonpython3二进制文件的精确副本被放置在这个目录中,但是Python被编程为首先在environment目录中查找与其路径相关的库。它不是Python标准库的一部分,但得到了PyPA(Python Packaging Authority)的正式支持。激活后,您可以使用pip在虚拟环境中安装包。

>

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

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

    virtualenvwrappervirtualenv的一组扩展(请参阅文档)。它为您提供了诸如mkvirtualenvlssitePackages等命令,特别是用于在不同virtualenv目录之间切换的workon。如果您想要多个virtualenv目录,此工具特别有用。

    pyenv-virtualenvwrapperpyenv的一个插件,作者与pyenv作者相同,可以方便地将virtualenvwrapper集成到pyenv中。

    pipenv旨在将pipfilepipvirtualenv组合为命令行上的一个命令。virtualenv目录通常放在~/.local/share/virtualenvs/xxx中,其中xxxx是项目目录路径的哈希。这与virtualenv不同,virtualenv中的目录通常位于当前工作目录中。pipenv用于开发Python应用程序(与库相反)。还有pipenv的替代方法,例如poice,我在这里不列出,因为这个问题只是关于命名类似的包。

    >

  • pyvenv是Python3附带的脚本,但在Python3.6中不推荐使用,因为它存在问题(更别提令人困惑的名称)。在Python 3.6+中,其确切等价物是python3-m venv

    venv是Python3附带的一个包,您可以使用python3-m venv来运行该包(尽管出于某种原因,一些发行版将其分离到一个单独的发行版包中,例如Ubuntu/Debian上的python3-venv)。它的作用与virtualenv相同,但只有其特性的一个子集(参见此处的比较)。virtualenv仍然比venv更受欢迎,特别是因为前者同时支持Python2和3。

  •  类似资料:
    • 问题内容: Python 3.3在其标准库中包含了新软件包。它有什么作用?与似乎与匹配的所有其他软件包有何不同? 问题答案: PyPI软件包不在标准库中: 是一个非常流行的工具,可为Python库创建隔离的Python环境。如果你不熟悉此工具,我强烈建议你学习它,因为它是非常有用的工具,在本答案的其余部分中,我将对其进行比较。 它的工作原理是在目录(例如:)中安装一堆文件,然后修改PATH环境变量

    • 问题内容: 我是一个试图学习python的红宝石程序员。我很喜欢pyenv,因为它就像是rbenv的复制和粘贴。Pyenv帮助在系统中拥有多个版本的python,并且在不接触系统敏感部分的情况下隔离python。 我想每个python安装都带有pip包。我仍然不明白的是,有很多好的python库建议使用此virtualenv和anaconda。我什至可以找到pyenv的virtualenv插件。

    • 问题内容: 我最近学习了如何在工作流程中使用virtualenv和virtualenvwrapper,但是我在一些指南中看到了pyenv,但是我似乎无法理解pyenv是什么以及它与virtualenv有何不同/相似。pyenv是virtualenv的更好/更新的替代品还是免费的工具?如果后者有什么不同之处,以及两者(以及适用的virtualenvwrapper)如何一起工作? 问题答案: Pyen

    • 问题内容: 之间有什么区别: 和 和 问题答案: 注意事项 : 这个答案仅涵盖了系列和系列之间的时序差异。。 为了这个答案的目的,我将使用一些示例方法: 是一个函数,它需要一个整数毫秒,并返回一个承诺,该承诺将在该毫秒后解析。 是一个函数,它需要一个整数毫秒,并返回一个承诺,该承诺将在该毫秒后被拒绝。 调用将启动计时器。在所有延迟完成后,可以使用等待一些延迟来解决,但请记住它们是同时执行的: 例子

    • 问题内容: 之间有什么区别: 和 和 问题答案: 注意事项: 这个答案仅涵盖了await系列和系列之间的时序差异Promise.all。请务必阅读@mikep的综合答案,其中也涵盖了错误处理方面更重要的区别。 出于此答案的目的,我将使用一些示例方法: res(ms) 是一个函数,它需要一个整数毫秒,并返回一个承诺,该承诺将在该毫秒后解析。 rej(ms) 是一个函数,它需要一个整数毫秒,并返回一个

    • 问题内容: 自从我再次开始使用Java进行编程以来,我就一直在使用HashMaps,而实际上并没有真正理解这些Collections的知识。 老实说,我不确定完全使用HashMaps是最适合我还是生产代码。到目前为止,对我而言,只要我能够获取需要用PHP调用它们的方式的数据对我来说都没关系(是的,我承认您现在正在考虑的任何负面想法)在哪里提供了极大的方便回忆变量数组。 所以现在,我已经使用Java