easy-install.pth和* .egg-link中冗余条目背后的动机是什么?

时间:2014-04-07 11:41:20

标签: python python-2.7 setuptools setup.py

我正在尝试使用python设置工具。

我使用了pbr。我的代码是https://github.com/HarishAtGitHub/doc/tree/master/Pythonsetuptools/pbr

我做了

python setup.py develop 

并在

中找到了我的包裹的条目

1)easy-install.pth

2)* .egg-link

当在easy-install.pth中输入所需内容时,* .egg-link中具有相同位置引用的动机是什么。

即使我删除* .egg-link,包仍然是可导入的,那么在dist-packages中将egg-link文件中的链接用于什么目的呢?

我搜索并找到了http://www.ianbicking.org/docs/setuptools-presentation/第11张幻灯片并找到了

  

develop安装包而不将其移动到site-packages /

     

Paste.egg-link是〜/ co / paste

的穷人符号链接      

easy-install.pth还指向〜/ co / paste Python查找.pth文件   site-packages并将其内容添加到sys.path

但是我仍然无法理解为什么我们需要输入* .egg-link才能在没有它的情况下工作?

1 个答案:

答案 0 :(得分:1)

性能

您说得对,那里有些重复。 easy-install.pth中的所有文件夹都来自.egg-link个文件。

您可以将easy-install.pth视为可在Egg链接中找到的文件夹的重复数据删除列表。这些文件夹已添加到sys.path。这是一种缓存形式-您避免每次都必须扫描所有egg-link文件。

包装标识与模块位置

您不能简单地根除egg-link文件,因为它们代表了。这就是pip找出是否已安装给定软件包的方式。例如参见https://stackoverflow.com/a/42583363/1075152

示例:具有多个软件包的单个文件夹

假设您以可编辑模式安装了两个软件包“ a”和“ b”,它们都位于同一文件夹中。

/path/to/my_packages/a/__init__.py
/path/to/my_packages/b/__init__.py

您现在在{{1}中有一个一个条目(两个模块都可以从其中导入),但是您有两个 {{1 }}文件(每个程序包一个)。

示例:与模块名称不同的软件包

假设您有一个名为easy-install.pth的软件包。它包含提供.egg-link模块的代码,不带mycompanystoolbox前缀-因此您可以toolbox

您现在有了一个表示软件包的文件mycompanys,还有一个import toolbox中的文件夹,可以从其中导入mycompanystoolbox.egg-link模块。