Python/虚拟环境
virtualenv 是一个用于为 Python 应用程序创建隔离工作空间的工具。它有多种优点,例如能够本地安装模块、导出工作环境以及在该环境中执行 Python 程序。
概述
虚拟环境是一个目录,其中安装了一些二进制文件和 shell 脚本。这些二进制文件包括用于执行脚本的 python 和用于在环境中安装其他模块的 pip。还有一些 shell 脚本(分别用于 bash、csh 和 fish)用于激活环境。本质上,虚拟环境模拟了 Python 及其所有所需模块的完整系统安装,而不会干扰应用程序可能运行的任何系统。
在 2017 年,发布了 Pipenv,它管理上述所有工具 - 管理 python 解释器的虚拟环境、包依赖项、它们的激活以及在 Pipfiles 中可重现的版本锁定。
安装
Python 3.3+ 自带一个名为 venv 的模块。对于需要旧版本 Python 的应用程序,必须使用 virtualenv。
软件包
安装 以下软件包之一以使用 Python 虚拟环境
- Python 3.3+: python
- Python 3: python-virtualenv
对于 Pipenv
- Python 3: python-pipenv
用法
所有这三个工具都使用类似的工作流程。
创建
使用 venv 或 virtualenv 在您的项目目录中创建虚拟环境。请务必从版本控制中排除 venv 目录——pip freeze
的副本就足以重建它。
venv
此工具由 python (3.3+) 提供
$ python -m venv envname
virtualenv
对于 Python 3,请使用 virtualenv,可在 python-virtualenv 中获得。
$ virtualenv envname
激活
使用提供的 shell 脚本之一来激活和停用环境。此示例假定使用 bash。
$ source envname/bin/activate (envname) $
进入虚拟环境后,可以使用 pip 安装模块,并像往常一样运行脚本。
要退出虚拟环境,请运行 bin/activate
提供的函数
(envname) $ deactivate
Python 版本
默认情况下,虚拟环境是使用系统 Python 创建的。bin/python 二进制文件只是系统 python 的符号链接
$ ls -l envname/bin/python lrwxrwxrwx 1 foo foo 15 Jan 29 18:48 envname/bin/python -> /usr/bin/python
如果要在虚拟环境中使用不同的 Python 版本,可以使用 virtualenv 的 -p
/--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 函数时加载 virtualenvwrapper。
重新打开您的控制台以应用更改。WORKON_HOME
目录将自动创建。
基本用法
有关用法(和扩展功能),请参阅 https://virtualenvwrapper.readthedocs.io/en/latest/。
创建虚拟环境(除了 -a
、-i
、-r
和 -h
之外的所有命令行选项都直接传递给 virtualenv,因此您可以使用 -p
选择 Python 版本)
$ mkvirtualenv envname
激活虚拟环境
$ workon envname
在虚拟环境中安装一些软件包(例如,Django)
(envname) $ pip install django
完成操作后,离开虚拟环境
(envname) $ deactivate
Pipenv
pipenv 通过提供一个程序来执行上述所有工具的功能,从而实现更好管理的 CLI 交互。
安装
安装 python-pipenv 软件包。
基本用法
所有命令都可以在项目文件夹中执行,pipenv 将识别具体情况——目录中是否存在 virtualenv,定位它,并在执行 pipenv 时在特定的虚拟解释器上运行。