Python 入口点使用示例

Python 入口点使用示例,python,hook,setuptools,Python,Hook,Setuptools,I发现设置工具的入口点: 引用:setuptools支持创建“插件”到可扩展应用程序和框架的库,方法是允许您在项目中注册可由应用程序或框架导入的“入口点” 但我还没有看到一个项目使用它们 有使用它们的项目的例子吗 如果没有,为什么不使用它们?有很多例子。例如,任何定义控制台脚本的项目都会使用它们。A给了你足够的浏览空间 我将重点介绍一个特定的示例(一个不在GitHub上的示例): Babel对两个控制台脚本都使用入口点,并为可翻译文本提取定义扩展点。见他们的: 像pip和zc.buildout

I发现设置工具的入口点:

引用:setuptools支持创建“插件”到可扩展应用程序和框架的库,方法是允许您在项目中注册可由应用程序或框架导入的“入口点”

但我还没有看到一个项目使用它们

有使用它们的项目的例子吗

如果没有,为什么不使用它们?

有很多例子。例如,任何定义控制台脚本的项目都会使用它们。A给了你足够的浏览空间

我将重点介绍一个特定的示例(一个不在GitHub上的示例):

Babel对两个控制台脚本都使用
入口点
,并为可翻译文本提取定义扩展点。见他们的:

pip
zc.buildout
这样的工具使用
console_脚本
入口点来创建命令行脚本(一个名为
pybabel
,运行
babel.messages.frontend
模块中可调用的
main()

distutils.commands
入口点定义了运行
setup.py
时可以使用的其他命令;这些可以在您自己的项目中使用,以便从安装脚本中调用Babel命令行实用程序

最后,但并非最不重要的一点是,它注册了自己的checker和extractor。
babel.extractors
入口点由加载,使用,允许访问注册该入口点的所有已安装Python项目。以下代码在这些条目中查找特定的提取器:

try:
    from pkg_resources import working_set
except ImportError:
    pass
else:
    for entry_point in working_set.iter_entry_points(GROUP_NAME,
                                                     method):
        func = entry_point.load(require=True)
        break
这允许任何项目注册额外的提取器;只需在
setup.py中添加一个入口点,Babel就可以利用它。

就是一个很好的例子。Sentry的作者甚至创建了一个名为django的包,用于将标准django管理命令转换为控制台脚本

try:
    from pkg_resources import working_set
except ImportError:
    pass
else:
    for entry_point in working_set.iter_entry_points(GROUP_NAME,
                                                     method):
        func = entry_point.load(require=True)
        break