【问题标题】:Python packages and egg-info directoriesPython 包和 egg-info 目录
【发布时间】:2010-09-20 08:42:15
【问题描述】:

有人能解释一下 egg-info 目录是如何与它们各自的模块相关联的吗?例如,我有以下内容:

/usr/local/lib/python2.5/site-packages/quodlibet/
/usr/local/lib/python2.5/site-packages/quodlibet-2.0.egg-info/

我假设 egg-info 目录是为了让 setuptools (easy_install) 可以看到相应的模块,对吧?如果有,setuptools 是如何将 egg-info 目录绑定到模块目录的?

假设我走在正确的轨道上,并且为了举例......如果我想让我的现有包对 setuptools 可见,我可以将模块目录和 egg-info 目录符号链接到站点包目录?我自己会尝试这个,但我不确定如何测试该包是否对 setuptools 可见。如果你也可以告诉我如何测试这个,加分:)

我试图理解这一切的主要原因是因为我想将我的一些模块符号链接到站点包中,以便我可以对它们进行更改并使使用它们的脚本可以看到更改而无需每次更改后从 PyPI 重新安装 egg。

【问题讨论】:

  • 你还有一个用于 python 的 quodlibet 插件吗?听起来很酷。
  • @PeterTurner 这可能就是 quodlibet 本身——it's written in Python

标签: python setuptools egg


【解决方案1】:

.egg-info 目录只有在 --single-version-externally-managed 用于安装 egg 时才会创建。 “通常”,安装 egg 会创建一个目录(或 zip 文件),其中包含代码和元数据。

pkg_resources(读取元数据的库)有一个函数require,可用于请求特定版本的包。对于“老式”的常规导入,easy_install 会破解一个 .pth 文件以将 egg 目录放到 sys.path 中。对于--single-version-externally-managed,不需要这种hacking,因为只会安装一个版本(通过系统的打包基础设施,例如rpm或dpkg)。对于使用 require(或任何其他 pkg_resources 绑定机制)的应用程序,仍然包含 egg-info。

如果你想通过硬链接安装一个包,我推荐使用“setup.py develop”。这是来自 setuptools 的命令,它实际上并没有安装 egg,而是使它在站点范围内可用。为此,它创建了一个 egg-link 文件,以便 pkg_resources 可以找到它,并操作一个 .pth 文件,以便常规导入可以找到它。

【讨论】:

  • 要反转setup.py develop的效果,请使用setup.py develop -u
  • 请注意,这是一个小写的-u。大写的-U 做了别的事情。
猜你喜欢
  • 1970-01-01
  • 2011-04-04
  • 2015-08-27
  • 2021-09-16
  • 2014-01-27
  • 2020-08-04
  • 1970-01-01
  • 2014-11-23
  • 2021-12-03
相关资源
最近更新 更多