什么是virtualenv,我为什么要使用它?

Kev*_*vin 36 python pip virtualenv

我正在尝试使用此命令安装Python包

pip install <name of package>
Run Code Online (Sandbox Code Playgroud)

我收到了许可错误,我不知道为什么.我可以运行它sudo,但有人告诉我这是一个坏主意,我应该使用virtualenv代替.

什么是virtualenv?它对我有什么用?

Kev*_*vin 43

使用系统运行Python和库将您限制为由OS提供商选择的一个特定Python版本.尝试在一个Python安装上运行所有Python应用程序可能会导致库集合之间发生版本冲突.系统Python的更改也可能会破坏依赖于它的其他操作系统功能.

虚拟环境或"virtualenvs"是轻量级,独立的Python安装,旨在简化设置,"无需工作",无需大量配置或专业知识.

virtualenv避免了全局安装Python包的需要.当virtualenv处于活动状态时,pip 将在环境中安装包,这不会以任何方式影响基本Python安装.

在Python 3.3或更高版本中,您可以创建virtualenv,如下所示:

$ python3 -m venv ENV_DIR
Run Code Online (Sandbox Code Playgroud)

对于Windows,您应该替换python3为python.exe的完整路径:

>C:\Python34\python.exe -m venv ENV_DIR
Run Code Online (Sandbox Code Playgroud)

(这是典型的Python安装;您的系统可能会有所不同.)

在旧版本的Python(包括Python 2)中,以下命令之一在大多数情况下都适用:

$ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR
Run Code Online (Sandbox Code Playgroud)

ENV_DIR应该是一个不存在的目录.该目录可以有任何名称,但为了使这些说明简单,我假设您已在名为venv(例如with python3 -m venv ./venv)的目录中创建了virtualenv .

要在virtualenv中工作,请激活它:

$ . ./venv/bin/activate
(venv)$ 
Run Code Online (Sandbox Code Playgroud)

或者如果你有一个Windows系统,请使用它:

$ venv\Scripts\activate
Run Code Online (Sandbox Code Playgroud)

(venv)在shell提示让你知道哪些VIRTUALENV您已经激活了,不过你可以关闭此功能,如果你不喜欢它.你可以运行所有常用的Python命令,它们将是你的virtualenv的本地命令:

(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>> 
Run Code Online (Sandbox Code Playgroud)

python将运行您安装到virtualenv中的Python版本,因此(例如)您不必键入python3以获取Python 3.它运行的Python将可以访问所有标准库模块和您安装的所有软件包进入virtualenv,但(默认情况下)没有安装在系统范围site-packages目录中的软件包.

最后一条规则很重要:通过将virtualenv限制为仅使用本地安装的软件包,您可以确保控制项目正在使用哪些依赖项,即使下周安装或更新了一些新的系统范围软件包.如果您愿意,可以获得已安装软件包的列表:

(venv)$ pip freeze
requests==2.13.0
numpy==1.12.0
(venv)$ 
Run Code Online (Sandbox Code Playgroud)

pip 也可以解析这种格式并从中安装,它将安装相同的版本,即使在此期间已发布更新:

(venv)$ pip freeze >requirements.txt

(some-other-venv)$ pip install -r requirements.txt
[...]
(some-other-venv)$ python
>>> import requests
>>> import numpy as np
>>> 
Run Code Online (Sandbox Code Playgroud)

你可以通过停用它来摆脱virtualenv:

(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'
Run Code Online (Sandbox Code Playgroud)

您可以根据需要创建任意数量的virtualenv,它们不会相互干扰,也不会与系统包相互干扰.virtualenv"只是"一个目录下面有一堆二进制文件和脚本,所以你可以像删除任何目录一样删除virtualenv(rm -r venv在Unix上).如果virtualenv在你删除时被激活,你可能会混淆你的shell,所以deactivate在这种情况下首先可能是个好主意.


Had*_*ekh 8

安装软件包sudo pip将会全局安装软件包,这可能会破坏一些系统工具。

通过全局安装,这意味着您将就地安装软件包/usr/lib/python2.7/site-package,如果某些软件包需要以前版本的 python 软件包,此操作可能会破坏它。

virtualenv允许您通过创建隔离的 python 环境来避免全局安装 Python 包。这意味着它将仅在您想要的项目文件夹中安装软件包。

在 Mac 和 Linux 上

激活后,您可以使用 pip 安装软件包。

有关在 Windows 中使用它的更多信息: 如何在 Windows 中使用 virtualenv


f3n*_*1Xx 5

有时您没有获得root特权,并且最终可能无法使用sudo。在许多其他情况下,建议不要使用sudo安装软件包,因为它可能会覆盖某些其他应用程序正在使用的软件包。

Virtualenv可以帮助您创建不需要root特权的单独环境,并能够根据需要定制环境。它由独立的python安装组成,该安装仅与您创建的特定环境交互。

因此,从根本上讲,它给您带来一些自由,同时避免了损坏(或修改)可能承载着旧应用程序许多旧功能的根环境。

安装也很容易。