setuptools - setuptools python 安装,将一个模块安装为另一个模块的子模块?

  显示原文与译文双语对照的内容

我想创建一个包,它安装到另一个 python 包的子模块中作为扩展。

基本上,原始模块设置如下:


origmodule/


 __init__.py


 stuff.py


 ext/


 __init__.py


 # This module is empty



然后将我的扩展模块安装到空 origmodule.ext 模块中。 阅读 distutils的指令并不清楚这是否可能或者被支持。 最终目标是,我的扩展模块一旦安装就会像这样导入:

import origmodule.ext.my_extension

时间: 原作者:

你不能用setuptools做这个,在另外一个包里安装它,不支持。

相反,你希望使用入口点( ) 。 你的origmodule 应该寻找注册为特定密钥的入口点的任何内容,而 extension 模块应该为该密钥本身。

扩展注册一个扩展点:


entry_points={


 'some.opaque.string.unique.to.origmodule':


 ['my_extension = my.extension.package:some.entry.point', ]


}



你的origmodule 可以通过询问 pkg_resources 来发现:


import pkg_resources



for entrypoint in pkg_resources.iter_entry_points(group='some.opaque.string.unique.to.origmodule'):


 extension = entrypoint.load()



看一下项目( Babel ),例如。 Babel可以从文件中提取可以翻译文本;它知道如何对 python 源代码执行这里操作,但它还支持从其他格式提取此类文本的扩展。

这种提取方法可以注册为扩展点。 Babel文档在写提取方法节中。 在提取文本时,消息提取代码会加载这些入口点:


GROUP_NAME = 'babel.extractors'



#.. .



for entry_point in working_set.iter_entry_points(GROUP_NAME,


 method):


 func = entry_point.load(require=True)


 break



web Mako模板语言插件提供此类插件,它注册入口点,它指向实际实现


[babel.extractors]


mako = mako.ext.babelplugin:extract




def extract(fileobj, keywords, comment_tags, options):


 #.. .



原作者:
...