[1987] Python Environment

Title Text:The Python environmental protection agency wants to seal it in a cement chamber, with pictoral messages to future civilizations warning them about the danger of using sudo to install random Python packages.

Origin:https://xkcd.com/1987/

https://www.explainxkcd.com/wiki/index.php/1987:_Python_Environment

开发环境是用于创建计算机程序的工具的集合。它通常包括解释器,包管理器和项目所需的各种库。计算机程序通常依赖于这些工具的特定版本,例如仅在Python 2.7上运行的程序。配置错误的构建环境可能会导致神秘的错误,因为程序会查找不存在的库或功能,从而难以开发稳定且可移植的软件。

Python是一种计算机编程语言,已经存在了很长一段时间,特别是在Linux平台上。 Randall之前表现出了对Python的迷恋。他很可能在他的计算机上使用它已经有好几年了,从安装起来不太容易的早期开始,通过更新版本,有更明确的安装方式。因为标准随着时间的推移而变化(特别是,尽管最新版本的Python是Python 3.x,但许多人更喜欢Python 2.x并且它仍然广泛用于向后兼容性),并且在安装之前他没有完全卸载旧版本新版本(可能不会破坏已经工作的东西),他最终弄得一团糟,其中不同的部分和版本的Python及其相关组件乱丢了他的硬盘驱动器的目录结构。

超级基金是美国联邦政府为清理污染土地而制定的计划。漫画说他的计算机的Python环境如此混乱,以至于它与真实世界的环境灾难相当。

标题文本可能涉及围绕新墨西哥WIPP站点周围警报特征构建的哲学辩论,以及其他核废料处置场所。特别是,它可以参考这篇文章。这些必须持续数万年,并且可以理解,比迄今为止任何已知的人造结构或语言都要长。

$ PATH

$ PATH指的是PATH环境变量,它决定了搜索可执行文件的位置。在这种情况下,它表明pip,Homebrew Python(2.7)和OSX的预装Python都可以在路径上访问,带有〜/newenv /和一个神秘的????作为PATH的一部分。

果仁

pip是Python包管理系统,用于安装和管理python包。由于它是用Python编写的,因此需要运行Python。它导致easy_install,Homebrew Python(2.7),“(root拥有的misc文件夹)”和????。

自制Python(2.7)

Homebrew是事实上标准的第三方OSX包管理器。 Homebrew Python(2.7)是通过Homebrew安装的Python 2版本。这导致Python.org二进制文件(2.6)和/usr /local /Cellar。

OS Python

Apple用OSX捆绑了一个(过时的)Python版本。这只会导致????。

????

由于在系统中安装和使用了如此多的Python版本,因此很难跟踪哪个Python程序使用哪个版本和环境。系统变得不可预测,其工作和故障是神秘的。导致这一点的图表的所有部分都会导致混淆。

easy_install的

easy_install,就像pip一样,是一个类似cpan的工具来下载和安装Python包。截至漫画创作时,很多人都不鼓励使用它。 (例如,关于堆栈交换的这个问题。

Anaconda Python

Anaconda是用于数据科学和机器学习相关应用程序的Python发行版。

自制Python(3.6)

截至漫画创作时,Python 3.6是目前稳定版的Python。它可以与Python 2.7一起安装在同一台计算机上。但是,必须注意为每个Python程序使用适当的版本。

Python.org二进制文件(2.6)

Python.org是Python语言的主站点,并提供其参考实现。除此之外,还有可下载的安装程序,可以为您创建可立即使用的Python环境(仅适用于Windows和macOS)。但是,在Homebrew,Anaconda和本地编译版本已经存在的计算机上使用它是没有意义的,因为Python.org版本是基线版本,不会给你任何好处,也不能根据您的需求进行优化有一个过时的2.6版本,当通常使用的2.7已经在计算机上,也没有帮助。确实存在一些合理的用途(测试,依赖于这个特定版本的程序),但最终,额外版本的Python只会增加整体混乱。

(由root拥有的杂项文件夹)这表明多年来Randall在他的计算机周围放置了各种版本的Python环境,可能没有适当的安装程序,并且使用了root权限。确切的位置要么是高度非标准的,所以向我们展示它们或者只是被遗忘是没有意义的。现在甚至很难分辨那些Pythons究竟在哪里,系统中的内容依赖于它们,以及是否可以安全地删除它们(因为如果由root安装,它们可以集成到系统中的意外位置;拥有它们可以打破一些东西,删除它们可能会破坏某些东西)。

在/usr /本地/酒窖

Homebrew Cellar的默认(正常)位置,Homebrew实际存储已安装软件包文件的目录。它只是一个存储位置,文件(包括Python)将与文件树中其他更方便的位置进行符号链接,不应直接通过/usr /local /Cellar路径使用。看起来Randall过去打破了这个安全规则,所以他的一些东西直接在Cellar中访问Python。如果Homebrew在Cellar中执行自动维护(例如删除不需要的软件包版本),这种设置可能会中断。

在/usr /本地/选择

/usr /local和/opt都是存储不是由类Unix操作系统的标准包管理系统维护的文件的目录。通常,/usr /local中的文件是使用make命令创建的,而/opt中的文件是非捆绑包。笑话是/usr /local /opt应该真的,真的不存在。

/(其中有一些“框架”的路径)/

macOS中包含系统的Python发行版驻留在/System /Library /Frameworks中

$ PYTHONPATH

环境变量PYTHONPATH指定Python模块到Python解释器的搜索路径。让它引用由3个不同的包管理器控制的位置,每个包管理器管理不同版本的Python的软件,如图所示,可能导致不兼容的软件被加载到一起。

另一个点?

Pip是“Pip Installs Packages”的递归首字母缩写。应该只有一个pip(或其他包管理系统)安装来管理任何给定的工作环境。更多的是会导致软件内部矛盾。 Randall对于另一个与其他开发环境的关系感到困惑。

〜/蟒蛇/

可能是另一个virtualenv,或者,考虑到漫画其余部分的荒谬,甚至是手动编译的python安装(许多在线指南指示用户将源提取到home(〜)目录中)。

〜/newenv /

可能是一个虚拟的人。 Virtualenvs是具有不与系统Python冲突的Python环境的机制。它们包括Python解释器,独立的库路径,通常还有pip的副本。用户通常使用virtualenv的pip来安装包,这样它们只能由virtualenv的Python实例访问,而更常见的包仍然通过系统Python路径引用。

/usr/local/lib/python3.6

对于本地编译的Python 3.6解释器,Python 3.6标准库的类Unix操作系统下的默认位置。

/usr/local/lib/python2.7

类Unix操作系统下的默认位置,用于本地编译的Python 2.7解释器的Python 2.7标准库。

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories