从阅读this documentation开始,我建立了一个关于sh setuptools-0.6c11-py2.7.egg
命令实际操作的心智模型,但是它非常不完整,我仍然被一些方面弄糊涂了。在
我的思维模式是这样的:
- 当发出这个命令时,egg(我认为它是一种处理依赖关系的zip文件)会在我的系统上找到正确版本的python,并使用该python将自己“安装”到适当的位置。在
- 实际上,这意味着一个名为easy_install的“Unix可执行文件”被创建在我的路径上。这就是为什么我可以稍后在终端中输入
easy_install somepackage
。在
因此,我的问题是:
- 一个“鸡蛋”怎么能这样“自我安装”?为什么这对这个鸡蛋特别有效,当其他鸡蛋需要容易安装工作?在
- 这样创建的“Unix可执行文件”是4kb。到底是什么?是不是充满了对其他事物的呼唤?他们在哪里?在
这不是一个'如何让它工作'的问题-我没有任何问题,沿着这条轴,但我想充分了解一下发生了什么。在
Tags:
Egg文件是简单的压缩目录,包含Python包、模块和一些元数据,扩展名为
.egg
。在zip格式是灵活的;它将忽略文件开头不属于zipfile的部分的任何内容。通过查找一系列字符(
PK
和另外两个表示类型的字节)并从中读取来检测zipfile。在这意味着你可以在拉链的前面放一些东西。
setuptools
鸡蛋的特殊之处在于它们使用以下技巧在zip数据之前插入一些shell脚本:经过前8行,这是一个真正的拉链:
^{pr2}$前8行中包含的脚本是运行
sh setuptools-0.6c11-py2.7.egg
时执行的脚本。在如您所见,该脚本特定于egg版本;这在python2.7版本中是特定的,它只是使用python解释器将这个egg添加到python搜索路径中。然后从包含的python模块导入一个函数并运行它。在
以下是鸡蛋本身的内容,正如我所提到的,它只是一个压缩存档:
相关问题 更多 >
编程相关推荐