我discoverd的setuptools的entry_points:例子
http://pythonhosted.org/setuptools/setuptools.html#dynamic-discovery-of-services-and-plugins
报价:setuptools的支持创建“插入”到可扩展的应用程序和框架库,通过让您在项目中注册“切入点”可以由应用程序或框架导入。
但我还没有看到使用它们的项目。
是否有使用它们的项目的例子?
如果不是,为什么不使用?
我discoverd的setuptools的entry_points:例子
http://pythonhosted.org/setuptools/setuptools.html#dynamic-discovery-of-services-and-plugins
报价:setuptools的支持创建“插入”到可扩展的应用程序和框架库,通过让您在项目中注册“切入点”可以由应用程序或框架导入。
但我还没有看到使用它们的项目。
是否有使用它们的项目的例子?
如果不是,为什么不使用?
有加载的例子。例如,任何定义控制台脚本的项目都会使用它们。 A quick search on GitHub为您提供了大量浏览。
我将重点介绍一个具体示例(其中一个是而不是,位于GitHub上):Babel。
巴贝尔同时使用entry_points
两个控制台脚本和定义扩展点的翻译文本提取。见他们的:
if have_setuptools:
extra_arguments = dict(
zip_safe = False,
test_suite = 'babel.tests.suite',
tests_require = ['pytz'],
entry_points = """
[console_scripts]
pybabel = babel.messages.frontend:main
[distutils.commands]
compile_catalog = babel.messages.frontend:compile_catalog
extract_messages = babel.messages.frontend:extract_messages
init_catalog = babel.messages.frontend:init_catalog
update_catalog = babel.messages.frontend:update_catalog
[distutils.setup_keywords]
message_extractors = babel.messages.frontend:check_message_extractors
[babel.checkers]
num_plurals = babel.messages.checkers:num_plurals
python_format = babel.messages.checkers:python_format
[babel.extractors]
ignore = babel.messages.extract:extract_nothing
python = babel.messages.extract:extract_python
javascript = babel.messages.extract:extract_javascript
""",
)
工具像pip
和zc.buildout
使用console_scripts
切入点,以创建命令行脚本(一个叫pybabel
,运行babel.messages.frontend
模块中的main()
调用)。
distutils.commands
入口点定义了运行时可以使用的其他命令setup.py
;这些可以用在你自己的项目中,从你的设置脚本中调用Babel命令行工具。
最后但并非最不重要的一点,它注册了自己的检查器和提取器。该babel.extractors
入口点是由babel.messages.extract.extract
function加载,使用setuptools
pkg_resources
module,给访问该注册的入口点所有安装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就可以使用它。