我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就可以使用它。