【问题标题】:Understanding Virtual Environment for Python了解 Python 的虚拟环境
【发布时间】:2013-02-02 22:03:43
【问题描述】:

我一直在阅读虚拟环境,它似乎是一个非常有用的工具,但现在我质疑到目前为止我是如何设置整个 python 环境的。现在,我安装的所有模块和包都驻留在这个目录中:

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

但是 virtualenv 文档似乎暗示这种通用系统安装是一件坏事。如果是这种情况,那么我应该如何处理我当前的模块以及我应该如何安装未来的模块?例如,我最近使用以下命令从我的用户目录安装了烧瓶:

pip install flask

它现在驻留在站点包中。我应该做一些不同的事情吗?我遇到了文档问题,这似乎表明我需要进入项目目录,设置虚拟环境,并使用 virtualenv 安装我需要的所有模块。是这样吗?有什么办法可以让事情变得不那么麻烦吗?似乎为每个项目目录安装潜在的几十个包会有点多。

或者我只需要为使用旧版本模块的项目创建虚拟环境,而不是我在系统目录中安装的那些?但是,如果是这种情况,那么似乎阻止所有系统安装的 virtualenv 口头禅是怎么回事?

【问题讨论】:

  • 对使用 virtualenv 的广泛鼓励可能是多用户计算机的考虑因素,其中系统安装可能会给其他用户带来各种未知后果。在尝试包版本等时,自己在每个项目中使用它也很方便/谨慎。最后,您可以导出环境以方便其他人使用您的脚本,这很好。
  • 另外你可以看看 virtualenvwrapper 这是一个非常强大的工具。它允许您将所有虚拟环境组织在一个地方,在其中进行切换和配置。

标签: python unix virtualenv


【解决方案1】:

如果你已经像这样安装了 virtualenv:

pip install virtualenv

然后您需要设置一个特定的 virtualenv 文件夹:

virtualenv [your project folder name]

这将创建包含几个重要子目录的项目文件夹。

在安装任何新的东西之前,您将首先激活您的 virtualenv,新安装的模块只有在“sourced”到您的 virtualenv 中时才可供您使用。从您的项目文件夹类型:

source bin/activate

然后您将在每个终端行的括号中看到您的 virtualenv 名称。这表明您已被“采购”。现在使用 pip 或 easy_install 安装东西。

pip install flask

virtualenv 基本上将您的路径设置为在 [venv 文件夹]/bin 中查找可执行文件,而不是 /usr/local/bin 或其他任何东西。因此,您可以将文件直接复制到您的虚拟环境 bin 文件夹中。 (例如,MongoDB 文件只是一个 zip/tar 文件,您可以将它们解压缩到您的 venv bin 文件夹中,当“来源”进入时,您将可以访问该特定版本的 MongoDB。)自己尝试,运行此命令你的虚拟环境,然后是默认环境,看看它是如何变化的。

echo $PATH && echo $PYTHONPATH

退出你的虚拟环境:

deactivate

键入此内容将使您回到默认环境。

如果你还没有读过这篇文章,这是一个很好的资源。

https://python-guide.readthedocs.org/en/latest/dev/virtualenvs/

【讨论】:

  • 有道理,但我应该为我的所有项目执行此操作,还是仅对那些与我在系统上安装的软件包有冲突的依赖项执行此操作?换句话说,我是否应该始终避免系统安装,让站点包基本上是空的,并且只使用 virtualenv 在本地导入模块/包?如果是这样,除了更新不向后兼容的模块的危险之外,这背后是否还有其他理由?有速度考虑吗?
  • 据我所知,使用 virtualenv 没有任何影响。就像我提到的那样,它只是为您设置环境变量并创建一个新的 lib 和 bin 文件夹。这是保持项目井井有条的好方法。这也是共享整个环境的好方法。如果你 git init 你的 virtualenv 文件夹,那么任何克隆它的人都不必下载所有额外的依赖项。它们就在 bin 和 lib 文件夹中。您可能需要编写一个 bash 文件,让他们可以从中获取源代码,但这很简单。如果其他应用程序需要依赖项,请在您的默认环境中安装。
【解决方案2】:

在您将任何东西投入/支持生产之前,virtualenv 的好处微乎其微。激活virtualenv只是一个额外的步骤,当然你必须在每个virtualenv中安装你的标准环境..真的没有那么多额外的努力......

但是,当您将某些东西投入生产时,当事情在夜间发生颠簸时,这可能是一个巨大的胜利:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2020-09-02
    相关资源
    最近更新 更多