Python/虚拟环境
虚拟环境工具可为 Python 应用程序创建一个隔离的工作空间。 虚拟环境的优势在于,可在本地安装模块、导出工作环境,并在其中执行 Python 程序。
概述
虚拟环境是安装了一些二进制文件和 shell 脚本的目录。 二进制文件通常是用于执行脚本的 python 和用于安装模块的 pip。 虚拟环境中也包含了用于激活环境的 shell 脚本(bash、csh 和 fish 均可用)。 虚拟环境本质上是模拟了一个安装了 Python 和所有所需的模块的完整系统,同时不会影响到任何运行此应用程序的系统。
Pipenv 于 2017 年发布,提供了上述所有工具的管理功能——管理 python 解释器所在的虚拟环境、包/模块和依赖关系及其激活和 Pipfiles 中可重现的版本锁定。
安装
Python 3.3+ 版本提供了一个叫做 venv 的模块。 对于使用早于此版本的 Python 的应用程序,必须使用 virtualenv。
软件包
从下面的软件包中选一个进行安装即可开始使用 Python 虚拟环境:
- Python 3.3+:python包
- Python 3:python-virtualenv包
Pipenv:
- Python 3:python-pipenv包
使用方法
上述三种工具的工作流程基本相似。
创建虚拟环境
在项目目录中使用 venv 或 virtualenv 创建一个虚拟环境。
请确保将虚拟环境目录从版本控制系统中排除——一份 pip freeze 的拷贝即可重建这个环境。
venv
此工具由 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,使用特定的虚拟解释器执行等。