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

新手上路,请多包涵

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

pip install <name of package>

我收到权限错误,我不确定为什么。我可以用 sudo 运行它,但有人告诉我这是个坏主意,我应该改用 virtualenv。

什么是虚拟环境?它对我有什么作用?

原文由 Kevin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 393
2 个回答

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

虚拟环境或“virtualenvs” 是轻量级、独立的 Python 安装,旨在以最少的麻烦进行设置,并且“正常工作”而无需大量配置或专业知识。

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

在 Python 3.3 或更高版本中,您可以按如下方式创建 virtualenv:

 $ python3 -m venv ENV_DIR

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

 >C:\Python34\python.exe -m venv ENV_DIR

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

在旧版本的 Python 中,包括 Python 2,以下命令之一在大多数情况下应该有效:

 $ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR

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

要在你的 virtualenv 中工作,你激活它:

 $ . ./venv/bin/activate
(venv)$

如果你有 Windows 系统,或者使用这个:

 $ venv\Scripts\activate

shell 提示中的 (venv) 让你知道你激活了哪个 virtualenv,但如果你不喜欢它,你可以关闭这个功能。你可以运行所有常用的 Python 命令,它们将在你的 virtualenv 本地:

 (venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>>

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

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

 (venv)$ pip freeze
requests==2.13.0
numpy==1.12.0
(venv)$

pip 也可以解析这种格式并从中安装,它会安装相同的版本,即使同时发布了更新:

 (venv)$ pip freeze >requirements.txt

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

您可以通过停用它来退出 virtualenv:

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

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

原文由 Kevin 发布,翻译遵循 CC BY-SA 4.0 许可协议

有时您没有获得 root 权限,您可能最终无法使用 sudo。很多时候,不建议使用 sudo 安装包,因为它可能会覆盖一些其他应用程序可能正在使用的包。

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

所以基本上,它为您提供了一些自由,并避免损坏(或修改)可能托管旧应用程序的许多旧功能的根环境。

安装也很简单。

原文由 ARKhan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题