ZetCode

Python venv

最后修改于 2024 年 1 月 29 日

Python venv 教程演示了如何使用 venv 模块在 Python 中创建虚拟环境。

虚拟环境

复杂的应用程序依赖于许多不同的依赖项。各种应用程序可能依赖于某个库,或者同一库的不同版本。由于 Python 无法区分其 site-packages 目录中的版本,因此创建虚拟环境作为一种解决方案。

包括 Visual Code 和 PyCharm 在内的 IDE 对虚拟环境提供了广泛的支持。

一个 虚拟环境 是一个自包含的目录树,其中包含特定 Python 版本的 Python 安装以及许多附加包。

常见的安装工具,如 setuptoolspip,在虚拟环境中按预期工作。当虚拟环境激活时,它们会将 Python 包安装到虚拟环境中,而无需显式告知。

Python venv

venv 模块能够创建具有自己站点目录的轻量级虚拟环境。每个虚拟环境都有自己的 Python 二进制文件(与用于创建该环境的二进制文件的版本相匹配),并且在其站点目录中可以拥有自己独立的已安装 Python 包集。(站点目录是我们安装第三方模块的目录。)

Python 创建虚拟环境

接下来,我们展示如何创建虚拟环境。

$ python --version
Python 3.8.5
$ python -m venv myenv
. myenv/bin/activate

这些命令将在 Linux 上创建并激活一个新的虚拟环境。

> py --version
Python 3.8.1
> py -m venv myenv
> myenv\Scripts\activate

这些命令将在 Windows 上创建并激活一个新的虚拟环境。

$ ls myenv/
bin  include  lib  lib64  pyvenv.cfg  share

bin 目录包含与虚拟环境交互的工具。include 目录包含编译 Python 包的 C 头文件。lib 目录包含 Python 版本的副本。它还包括 site-packages 子目录。

pyvenv.cfg 是一个配置文件,用于存储有关虚拟环境的信息,例如环境是从哪个原始 Python 克隆的(该 Python 将提供标准库)以及解释器的版本。

$ cat myenv/pyvenv.cfg
home = /usr/bin
include-system-site-packages = false
version = 3.8.5

这是 pyvenv.cfg 文件的示例输出。

Python 激活虚拟环境

在使用虚拟环境之前,我们需要先激活它。

$ python -m venv myenv

我们创建一个名为 myenv 的新虚拟环境。

$ . myenv/bin/activate
(myenv) $

我们激活虚拟环境。我们可以在提示符中看到环境的名称。

(myenv) $ echo $PATH
/janbodnar/Documents/prog/python/venv/myenv/bin:/janbodnar/.cargo/bin/:/janbodnar/
Documents/prog/go-workspace/bin/:/janbodnar/.config/composer/vendor/bin/:
... 

PATH 环境变量已更新;虚拟环境的 bin 目录位于开头。

(myenv) $ which pip python
/root/Documents/prog/python/venv/myenv/bin/pip
/root/Documents/prog/python/venv/myenv/bin/python

which 命令返回虚拟环境的 pippython 的路径。

(myenv) $ deactivate
$

使用 deactivate 命令,我们可以终止虚拟环境并返回到 shell。

Python venv 安装包

激活创建的虚拟环境后,pip 工具会将包安装到环境中。

(myenv) $ pip list
Package       Version
------------- -------
pip           20.0.2
pkg-resources 0.0.0
setuptools    46.1.3

我们使用 pip list 命令显示可用的包。目前,我们只有最少的包。

(myenv) $ pip install requests urllib3

我们将 requestsurllib3 模块安装到我们的新环境中。

(myenv) $ pip list
Package       Version
------------- ---------
certifi       2020.6.20
chardet       3.0.4
idna          2.10
pip           20.0.2
pkg-resources 0.0.0
requests      2.24.0
setuptools    46.1.3
urllib3       1.25.10

我们再次列出可用的包。除了 requestsurllib3 模块外,还有两个已安装模块安装的其他模块。

(myenv) $ pip freeze --local | xargs pip uninstall -y

要恢复到干净状态并删除所有已安装的包,我们可以执行此命令。

(myenv) $ deactivate
$

要退出虚拟环境,我们使用 deactivate 命令。

$ pip list
Package                      Version
---------------------------- --------------
adblockparser                0.7
AdvancedHTTPServer           2.2.0
aiocmd                       0.1.2
aiodns                       2.0.0
aiohttp                      3.6.2
aioredis                     1.3.1
aiowinreg                    0.0.3
ajpy                         0.0.4
alembic                      1.4.2.dev0
aniso8601                    8.0.0
apispec                      3.3.1
apispec-webframeworks        0.5.2
APScheduler                  0.0.0
asciitree                    0.3.3
asn1crypto                   1.4.0
...

在虚拟环境之外,我们引用标准的 Python 安装。它自然拥有更多的包。

$ rm -rf myenv/

如果不再需要虚拟环境,我们可以简单地删除它的目录。

来源

Python venv - 创建虚拟环境

在本文中,我们使用 venv 创建了 Python 虚拟环境。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Python 教程