为什么我的安装应用处理pkg_resources.iter_entry_points与源代码不同?

10 投票
1 回答
909 浏览
提问于 2025-04-17 21:41

我有一个用Python写的应用,它通过 pkg_resources.iter_entry_points 来寻找插件。

当我直接从源代码运行这个应用时,它会在 sys.path 中找到所有符合条件的东西,包括一些源代码的检查,这些检查恰好有适用的 .egg-info,这样 setuptools 就能找到它们。

但是,当我通过 python setup.py install 在任何地方安装这个包时,它突然就不再检测 sys.path 中的所有内容了,而只找到那些和它一起安装在 site-packages 里的东西。

  • 为什么 pkg_resources.iter_entry_points 在直接运行源代码和安装后的应用中表现得不一样?
  • 我该怎么做才能让它像在开发时那样遍历 sys.path 中的所有内容?

1 个回答

2
  1. 如何让它遍历 sys.path?

    pkg_resources.WorkingSet(None).iter_entry_points

  2. 为什么它的表现会不一样?可能是因为安装的包强制把至少关于它自己的元数据加载到内存中。从代码来看,我猜测你的主模块有一个 requires 属性,但这只是我的推测。无论如何,为了在开发时强制“已安装”的行为,运行 python setup.py develop 应该就足够了。

撰写回答