如何注册网络python包安装的入口点?

2024-09-30 00:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户环境,其中大多数python包都安装在网络共享上,并通过PYTHONPATH环境变量提供。Python本身仍然安装在本地。其中一些包需要注册setuptoolsEntry Points。通常,通过运行包的setup.py文件来实现这一点,但是由于这些文件安装在网络位置,因此{}永远不会与python的本地安装一起运行。在

有没有一种方法可以注册入口点而不必在本地python安装中安装包?在

为插件系统注册回调的入口点示例

setup(
    ...
    entry_points={
        'xx_plugin': ['value = package.module:func'],
    }
) 

Tags: 文件方法用户py网络插件示例环境
1条回答
网友
1楼 · 发布于 2024-09-30 00:30:18

运行setup.py

console_scriptsgui_scripts入口点创建包装可调用对象的独立脚本。^{}包就是一个很好的例子。为了方便起见,它有一个入口点来创建包装脚本。创建控制台脚本的示例setup.py代码段:

setup(
    ...
    entry_points = {
        'console_scripts': [
            'script_name = package.module:function'
        ]
    }
)

只能通过setup.py将脚本安装到指定的目录中。除非传递 force参数,否则不会覆盖现有脚本。在

^{pr2}$

对于插件,入口点作为元数据存储在通常与包一起安装的egg中。插件入口点示例:

^{3}$

通过setup.py只能将包的元数据(包括任何入口点)安装到指定的目录。在

python setup.py egg_info  egg-base $PYTHONPATH

自己滚吧

如果setup.py不能运行来编写egg元数据,那么完全可以自己滚动,因为它只是目录中的一个文本文件。基于上述入口点的元数据示例:

# $PYTHONPATH/entry_points.egg-info/entry_points.txt
[group_name]
plugin_name = package.module:function

要测试入口点查找,请执行以下操作:

import pkg_resources as pkg

for entry_point in pkg.iter_entry_points('group_name'):
    plugin_name = entry_point.name
    plugin_module_name = entry_point.module_name
    plugin_callable = entry_point.load()
    # do something with plugin

相关问题 更多 >

    热门问题