gpt4 book ai didi

python - pkg_resources : get own distribution?

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:32 26 4
gpt4 key购买 nike

我想找到一个文件的分布。该文件应该发现它自己的分布。

我试过了,但是不行:

import os
import pkg_resources
for dist in pkg_resources.find_distributions(os.path.dirname(__file__)):
print dist

上面的文件是使用pip install -e ...安装的。

我在文档中找不到解决方案:

https://pythonhosted.org/setuptools/pkg_resources.html#distribution-objects

解决方案不应包含包的字符串。它应该是通用的。

最佳答案

pkg_resources 分发 API 需要一个分发名称;这不一定与“当前”模块在其下运行的包名称相关。

以 BeautifulSoup 项目为例。当前版本使用 bs4 作为包名,但 PyPI 上的分发名称beautifulsoup4 .

一个发行版也可以包含多个顶级包或模块; pkg_resources 模块本身是 setuptools 分发的一部分,例如,连同 setuptools 包。

因此,您不能概括和使用__file____package__ 并希望始终获得相应的分布。

如果您的发行版是作为 egg 安装的(例如使用 easy_installzc.buildout),那么您可以搜索 .egg 路径中的扩展名,在该位置拆分路径并使用 Distribution.from_filename()从中生成一个 Distribution 对象;文件名包含所有必要的信息。但是,如果您的包是使用 pip 安装的,则会创建一个单独的 .egg-info 文件,您又回到了原点(无法找到分发名称)。

另一方面,您可以使用 pkg_resources.Environment() instance 为您的环境获取所有 Distribution 对象;但是您会遇到将现有发行版与给定模块或包匹配的相同问题,至少不会遇到公共(public) API。您可以扫描所有分布,.location 属性(对于鸡蛋)和(私有(private))Distribution._provider 属性的组合以及(完全可选)installed-files.txt 元数据条目(如果可用,包含相对路径(!))的存在将让您扫描整个环境以寻找匹配的分发,但这完全是取决于各种 resource providers 的内部实现细节.而且它可能是一个昂贵的搜索,当然对于更大的安装。

因此,您最好的选择是只使用硬编码的分发名称。

关于python - pkg_resources : get own distribution?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22610578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com