跳转到内容

Python/虚拟环境

来自 Arch Linux 中文维基

虚拟环境工具可为 Python 应用程序创建一个隔离的工作空间。 虚拟环境的优势在于,可在本地安装模块、导出工作环境,并在其中执行 Python 程序。

概述

虚拟环境是安装了一些二进制文件和 shell 脚本的目录。 二进制文件通常是用于执行脚本的 python 和用于安装模块的 pip。 虚拟环境中也包含了用于激活环境的 shell 脚本(bash、csh 和 fish 均可用)。 虚拟环境本质上是模拟了一个安装了 Python 和所有所需的模块的完整系统,同时不会影响到任何运行此应用程序的系统。

Pipenv 于 2017 年发布,提供了上述所有工具的管理功能——管理 python 解释器所在的虚拟环境、包/模块和依赖关系及其激活和 Pipfiles 中可重现的版本锁定。


安装

Python 3.3+ 版本提供了一个叫做 venv 的模块。 对于使用早于此版本的 Python 的应用程序,必须使用 virtualenv

软件包

从下面的软件包中选一个进行安装即可开始使用 Python 虚拟环境:

Pipenv:

使用方法

上述三种工具的工作流程基本相似。

创建虚拟环境

在项目目录中使用 venvvirtualenv 创建一个虚拟环境。 请确保将虚拟环境目录从版本控制系统中排除——一份 pip freeze 的拷贝即可重建这个环境。

提示:下面的示例中,envname 是虚拟环境名称也是目录名称。

venv

注意:这种方式将替换 pyvenv 脚本(此脚本已在 python 3.8 版本中被移除)。

此工具由 python(3.3+)提供:

$ python -m venv envname

virtualenv

python-virtualenv 提供了可用于 Python 3 的 virtualenv

$ virtualenv envname

激活虚拟环境

使用目录中提供的 shell 脚本以激活或停用虚拟环境:

$ source envname/bin/activate

虚拟环境激活后,命令行解释器的提示符前会显示类似下面的虚拟环境名称:

(envname) $

在虚拟环境中可正常使用 pip 安装模块和运行脚本。

运行如下的命令即可退出虚拟环境(此命令由 bin/activate 提供):

(envname) $ deactivate

Python 版本

默认情况下,虚拟环境由系统上安装的 Python 创建。 其中的 bin/python 是一个链接到系统上所安装的 python 的符号链接。 用 ls 查看可得到类似如下的输出结果:

$ ls -l envname/bin/python
lrwxrwxrwx 1 foo foo 15 Jan 29 18:48 envname/bin/python -> /usr/bin/python

对于 virtualenv,可以使用 -p--python 选项在虚拟环境中使用其他版本的 Python:

$ virtualenv -p 3.8 envname
$ ls -l envname/bin/python
lrwxrwxrwx 1 foo foo 18 Jan 29 18:48 envname/bin/python -> /usr/bin/python3.8

也可以使用 pypy3

$ virtualenv -p pypy3 envname

virtualenvwrapper

virtualenvwrapper 提供了更自然的命令行交互(一些用于创建、激活以及删除虚拟环境的命令)以管理虚拟环境。 该软件包是对 python-virtualenv 的包装。

安装

安装 python-virtualenvwrapper 软件包,并在 ~/.bashrc 中添加下面的配置:

~/.bashrc
export WORKON_HOME=~/.virtualenvs
source /usr/bin/virtualenvwrapper.sh

source /usr/bin/virtualenvwrapper.sh 会影响 shell 的启动速度。 使用 source /usr/bin/virtualenvwrapper_lazy.sh 可解决此问题,在这种情况下,只有当 virtualenvwrapper 被首次调用时才会加载。

重新打开 shell 以应用更改。 WORKON_HOME 目录会自动创建。

基本用法

使用方法和扩展功能请参见 virtualenvwrapper 文档

创建虚拟环境(除了 -a-i-r-h,其余的命令行参数都会被直接传递给 virtualenv,这里同样可以使用 -p 来指定 Python 版本):

$ mkvirtualenv envname

激活虚拟环境:

$ workon envname

在虚拟环境中安装包(模块),以 Django 为例:

(envname) $ pip install django

停用虚拟环境:

(envname) $ deactivate

Pipenv

pipenv 提供单个、囊括了上述工具的所有功能的程序,实现了更好的命令行交互管理。

安装

安装 python-pipenv 软件包。

基本用法

所有命令都可在项目目录中执行,pipenv 还会检测并定位 virtualenv,使用特定的虚拟解释器执行等。

更多信息请参见:[1][2][3]

另请参见