gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:09:37 26 4
gpt4 key购买 nike

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

有没有办法在不在本地 python 安装中安装包的情况下注册入口点?

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

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

最佳答案

运行setup.py

console_scriptsgui_scripts 入口点创建独立的脚本来包装可调用对象。 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

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

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

可以通过 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

关于python - 如何为网络 python 包安装注册入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37058544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com