虚拟环境神秘化

2021-01-02 17:09:30

以下是不完整的程序列表,它们都旨在以某种方式帮助创建或管理虚拟环境:

显然,这些东西一定很难做到正确。我也必须是个笨蛋,因为在编写了数千行Python之后,我什至不知道我们要在这里解决什么问题,而且名称不同的大量相关程序使我无法继续阅读。远。

一个独立的目录树,其中包含针对特定版本的Python的Python安装,以及许多其他软件包。

让我们来看看。目录?检查一下包含Python安装?检查一下包含许多其他软件包?零是数字! (检查。)特殊版本?嗯...

我认为可以。但是,它是独立的吗?它本身不包含……

撇开笑话,实际上只有两件事缺少使我们的目录成为PEP 405所指定的虚拟环境,该建议将虚拟环境的标准机制与Python集成在一起。 1个

(两个路径都取决于操作系统,第二个路径也取决于所使用的Python版本。)

$ tree--noreport.├──bin│└──python3├──lib│└──python3.6│└──站点包└──pyvenv.cfg

当我们运行Python二进制文件的副本时,pyvenv.cfg文件会更改启动过程中发生的事情:home键的存在告诉Python二进制文件属于虚拟环境,键的值(/ usr / bin)告诉它在哪里找到完整的Python安装,包括标准库。

底线是./lib/python3.6/site-packages成为模块searchpath的一部分。关键是我们现在可以将软件包安装到该位置,尤其是可能与同一系统上另一个Python程序的依赖项冲突的特定版本。 3

同一系统上的另一个项目在其自身的虚拟环境中可以具有不同版本的左键盘,而不会干扰该左键盘。

在实践中,不仅仅是手动创建虚拟环境,这使我们回到了上面艰巨的工具清单。幸运的是,其中之一与其他人不一样。尽管大多数人都在使用它,但Python还是标准库venv的一部分。 4

它还复制了许多其他内容:我在89个子目录中获得650个文件,总计约10 MiB。这些文件之一是pip二进制文件,我们可以使用它将包安装到虚拟环境中,而无需传递额外的命令线性参数:

您可以在Python教程或venv的文档中阅读有关使用venv和可选魔术(如“激活”脚本)的更多信息-这篇文章仅旨在说明虚拟环境的实际含义。

虚拟环境是一个目录,其中包含Python解释器,影响解释器启动的特殊pyvenv.cfg文件以及一些第三方Python程序包。安装到虚拟环境中的Python软件包不会干扰同一系统上的其他Python应用程序。 venv是“用于创建虚拟环境的标准工具”。

我认为Ian Bicking的non_root_python.py符合创建虚拟环境的第一个工具。基于此,virtual-python.py在2005年10月的0.6a6版中添加到EasyInstall中。以下是概述一些主要事件的时间表。

Ian Bicking,non_root_python.py(基于virtual-python.pyis的作者)的作者,发表了一篇有关改善virtual-python.py的博客文章,标题为“工作环境头脑风暴”。

在PEP 405被接受之前,虚拟环境纯粹是第三方工具的领域,没有语言本身的直接支持。 ↩

我认为这没有必要。但是,由于我假设是CPython中的bug,所以是这样。不过,bin /子目录当然是二进制文件的常规位置。 ↩

实际上,pyvenv也随Python一起提供,但是在3.6版中已弃用(引入后仅3个次要版本)。 venv和pyvenv均已在3.3版中添加到Python。 ↩