使用系统 Python 和库运行时,您只能使用一种特定的 Python 版本,该版本由操作系统提供商选择。尝试在一个 Python 安装上运行所有 Python 应用程序很可能会在库集合之间发生版本冲突。对 Python 系统的更改也可能会破坏依赖于它的其他操作系统功能。
虚拟环境,或“virtualenvs” https://virtualenv.pypa.io/en/stable/是轻量级、独立的 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
应该是一个不存在的目录。该目录可以有任何名称,但为了使这些说明简单,我假设您已在名为的目录中创建了 virtualenvvenv
(例如与python3 -m venv ./venv
).
要在您的 virtualenv 中工作,您需要激活它:
$ . ./venv/bin/activate
(venv)$
或者如果您有 Windows 系统,请使用此:
$ venv\Scripts\activate
The (venv)
shell 提示符可以让您知道您激活了哪个 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“只是”一个目录,其下有一堆二进制文件和脚本,因此您可以像删除任何目录一样删除 virtualenv (rm -r venv
在 Unix 上)。如果 virtualenv 在删除时被激活,您可能会混淆您的 shell,因此最好deactivate
首先在这种情况下。