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

标签 python pip virtualenv

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

pip install <name of package>

我遇到了权限错误,但我不知道为什么。我可以用 sudo 运行它,但有人告诉我这是个坏主意,我应该使用 virtualenv。

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

最佳答案

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

Virtual environments, or "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'

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

关于python - 什么是 virtualenv,我为什么要使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41972261/

相关文章:

python - PyPI 包装 : install_requires `pillow`

python - 如何pip安装一个包的最新补丁号?

python - 运行 python 脚本会产生 : ImportError: no module named termcolor

python - pyenv、virtualenv、anaconda 有什么区别?

python - 带有 aiocache 和 Redis 的 FastAPI 无法设置 databases.backends.postgres.Record 对象

python - 从过去 7 天创建 QuerySet 对象

python - 使数据结构在python中可迭代

python - 如何下载curses python3.4?

python - mypy 在 tox 中找不到模块

javascript - 将 javascript 字符串设置为从 Django 变量传播的值时如何转义引号?