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

2024-01-01

我有一个用户环境,其中大多数 python 软件包都安装在网络共享上,并可通过PYTHONPATH环境变量。 Python本身仍然安装在本地。其中一些软件包需要注册 setuptools切入点 http://pythonhosted.org/setuptools/pkg_resources.html#entry-points。通常,这可以通过运行setup.py包的文件,但因为它们安装到网络位置,setup.py永远不会与本地安装的 python 一起运行。

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

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

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

Run setup.py

The console_scripts and gui_scripts入口点创建包装可调用对象的独立脚本。这coverage https://pypi.python.org/pypi/coverage包就是一个很好的例子。为了方便起见,它有一个入口点来创建包装器脚本。例子setup.py创建控制台脚本的片段:

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

可以通过以下方式仅将脚本安装到指定目录setup.py。现有脚本不会被覆盖,除非--force论证通过。

python setup.py install_scripts --install-dir /some/alternate/location

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

setup(
    ...
    entry_points = {
        'group_name': [
            'plugin_name = package.module:function'
        ]
    }
)

可以通过以下方式仅将包的元数据(包括任何入口点)安装到指定目录setup.py.

python setup.py egg_info --egg-base $PYTHONPATH

滚动你自己的

If 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何注册网络 python 包安装的入口点? 的相关文章

随机推荐