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.
Python 環境保護局希望將他用水泥密封艙封起來,並且用警告圖案來提醒後代文明用 sudo 隨便裝 python 套件的危險性。
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标准库。