当前位置: 首页 > 面试题库 >

virtualenv和pyenv之间是什么关系?

单于煌
2023-03-14
问题内容

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


问题答案:

Pyenvvirtualenv 是非常不同的工具,它们以不同的方式工作以执行不同的操作:

  • Pyenv 是bash扩展- 不适用于Windows- 会拦截您对python,pip等的调用,以将其定向到多个系统python工具链之一。因此,您始终拥有在选定的python版本中安装的所有库,因此,这对于必须在不同版本的python之间进行切换的用户来说非常有用。

  • VirtualEnv 是纯python,因此可在任何地方使用,它会在激活环境中本地复制python和pip的副本( 可选的特定版本), 该副本可能包含或可能不包含指向当前系统工具链的链接,如果不能,则可以仅将已知的库子集安装到该环境中。这样一来,几乎可以肯定,对于测试和部署而言,要好得多,因为您 确切 知道使用 哪个库,使用了哪个版本,并且全局更改不会影响您的模块。

venv python > 3.3

请注意,从Python 3.3开始,VirtualEnv有一个内置实现,称为ve​​nv(在某些安装中,有一个名为pyvenv的包装器-在Python
3.6中已弃用
该包装器),应该优先使用它。为了避免包装程序可能出现问题,通常最好直接使用来使用它,/path/to/python3 -m venv desired/env/path也可以py在Windows上使用出色的python选择器py -3 -m venv desired/env/path。它将创建用desired/env/pathconfigure指定的目录并适当地填充它。通常,这非常类似于使用VirtualEnv。

其他工具

有许多值得一提和考虑的工具,因为它们可以帮助使用上述一种或多种:

  • VirtualEnvWrapper管理和简化VirtualEnv- Cross平台 的使用和管理。
  • pyenv-virtualenv, 由 pyenv-installer安装,为PyEnv工具提供了用于管理和与VirtualEnv交互的工具-通过此工具,您可以进行基本安装,包括一个以上版本的python,并在每个版本中创建隔离的环境 -Linux / OS- XJohann Visagie建议
  • PyInstaller可以获取可能在VirtualEnv下开发和html" target="_blank">测试的python代码,并将其捆绑在一起,以便它可以运行未安装python 版本的 平台-请注意,它不是交叉编译器,因此您需要Windows(虚拟) -)机器来构建Windows安装等,但是即使您可以确定将安装python但不能确定python的版本和所有库是否与您的代码兼容,它也可以派上用场。


 类似资料:
  • Python3.3在其标准库中包含新的包。它是做什么的,它与似乎与regex匹配的所有其他包有什么不同?

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

  • 问题内容: 我发现了一个示例,在该示例中,将按钮添加到面板(的实例),然后将面板添加到容器(的实例),然后根据构造将容器包括在(窗口)中。 我尝试了两件事: 我摆脱了容器。在更多详细信息中,我将按钮添加到面板(实例为),然后将面板添加至窗口(实例为)。工作正常。 我摆脱了面板。在更多详细信息中,我直接将按钮添加到了容器,然后将容器添加到了窗口(的实例)。 所以,我不明白两件事。 为什么我们有两种竞

  • 我正在学习ASP.NET Core3.1。 注意到当我们开始这个项目的时候。它将转到ConfigureServices并注入一个服务。 我的问题是为什么服务可以使用那些扩展方法? 谢了。

  • 我看到这里 老实说,我不理解这张纸条。它们是否意味着有可能用MonadPlus永远中断,例如IO Bool?比如说,IO False将破坏它。。。 当然,我可以破例或者永远实现自己的,但我的兴趣是关于这个奇怪的音符。

  • 我正在使用Drools 6.2.0。最终,我需要使用window:time处理一组事件。每个事件都有一个日期字段。 在我的drl中: e1 (2015-01-01 00:00:00) e2 (2015-01-01 00:00:20) e3 (2015-01-01 00:00:40) e4 (2015-01-01 00:01:00) 场景1:使用实时并同时插入集合a事件。 场景2:使用pseudo,