了解Python的虚拟环境

8

我一直在研究虚拟环境,似乎这是一个非常有用的工具,但现在我开始怀疑我迄今为止设置Python环境的方式。目前,我安装的所有模块和包都驻留在此目录中:

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

但是,virtualenv文档似乎表明这样的全局系统安装不好。如果是这种情况,那么我应该怎么处理我的当前模块,并且未来应该如何安装模块?例如,我最近使用以下命令从我的用户目录安装了flask:

pip install flask

现在它位于site-packages中。我应该做些不同的事情吗?我在文档方面遇到了问题,文档似乎暗示我需要进入项目目录,设置虚拟环境,并使用virtualenv安装所有需要的模块。是这样吗?有没有办法让事情变得更简单?似乎为每个项目目录安装数十个软件包有点过于繁琐。
或者是只有在使用旧版本的模块的项目中才需要创建虚拟环境?如果是这样的话,那么似乎virtualenv的口号似乎鼓励不要安装系统级别的软件包是怎么回事呢?

1
广泛鼓励使用virtualenv可能是考虑到多用户机器上的情况,系统安装可能会对其他用户产生各种未知后果。当你在尝试不同的软件包版本等时,使用它来针对每个项目自己使用也很方便和明智。最后,你可以导出环境,使他人更容易使用你的脚本,这非常好。 - m.brindley
1
此外,您可以看一下 virtualenvwrapper,这是一个非常强大的工具。它允许您将所有虚拟环境组织在一个地方,轻松切换和配置。 - ScotchAndSoda
2个回答

14

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

pip install virtualenv

然后,您需要设置一个特定的虚拟环境文件夹:

virtualenv [your project folder name]

这将创建该项目文件夹以及一些重要的子目录。

在安装任何新内容之前,您需要先激活您的虚拟环境。新安装的模块只有在进入虚拟环境后才能使用。在您的项目文件夹中键入以下命令:

source bin/activate

然后,你会在每个终端行中看到括号中的虚拟环境名称。这表示你已经“激活”了它。现在,使用pip或easy_install安装所需的内容。

pip install flask

virtualenv基本上会将您的路径设置为在[venv文件夹]/bin中查找可执行文件,而不是/usr/local/bin或其他位置。因此,您可以直接将文件复制到虚拟环境bin文件夹中。(例如,MongoDB文件只需以zip/tar文件形式提供,您可以将它们解压缩到vben bin文件夹中,然后在“sourced”时就可以访问该特定版本的MongoDB了)。请自行尝试运行此命令,从虚拟环境和默认环境中运行,看看它如何更改。

echo $PATH && echo $PYTHONPATH
退出虚拟环境的命令为:deactivate。
deactivate

键入此命令将使您返回默认环境。

如果您尚未阅读此内容,它是一个相当不错的资源。

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


这是有道理的,但我应该为所有项目做这个,还是只有那些与我在系统上安装的软件包发生冲突的项目?换句话说,我是否应该始终避免系统安装,使site-packages基本为空,并仅使用virtualenv在本地导入模块/软件包?如果是这样,除了更新不向后兼容的模块的危险之外,还有其他原因吗?有速度考虑吗? - user1427661
1
据我所知,使用virtualenv没有任何后果。就像我提到的那样,它只是为您设置环境变量并创建一个新的lib和bin文件夹。这是一个很好的方式来保持您的项目有组织。这也是共享整个环境的好方法。如果您在virtualenv文件夹中进行git init,那么克隆它的任何人都不必下载所有额外的依赖项。它们就在bin和lib文件夹中。您可能需要编写一个bash文件,使他们可以源到其中,但这很简单。如果其他应用程序需要依赖项,请在默认环境中安装。 - Rob Carpenter

0

在将任何东西投入/支持生产之前,虚拟环境的最小好处是微不足道的。这只是激活虚拟环境的额外步骤,当然您必须在每个虚拟环境中安装您的标准环境...并没有太多额外的努力...

然而,当您将某些内容投入生产时,当事情出现问题时,它有可能是一个巨大的胜利 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接