我正在使用入口点开发一个带插件的松散机器人.我想在运行时动态添加插件.
我有一个这种结构的项目:
+ ~/my_project_dir/
+ my_projects_python_code/
+ plugins/
- plugin1.py
- plugin2.py
- ...
- pluginN.py
- setup.py
- venv/
- install.sh
Run Code Online (Sandbox Code Playgroud)
我的setup.py文件看起来像这样:
from setuptools import setup, find_packages
setup(
name="My_Project_plugins",
version="1.0",
packages=['plugins'],
entry_points="""
[my_project.plugins]
plugin1 = plugins.plugin1:plugin1_class
plugin2 = plugins.plugin2:plugin2_class
...
pluginN = plugins.pluginN:pluginN_class
"""
)
Run Code Online (Sandbox Code Playgroud)
运行sudo install.sh执行以下操作:
将所需文件复制到 /usr/share/my_project_dir/
激活virtualenv at /usr/share/my_project_dir/venv/bin/activate
跑: python setup.py develop
这按预期工作,并正确设置我的入口点,以便我可以通过机器人使用它们.
但我希望能够setup.py在机器人运行时添加插件并能够使用它.所以我想添加一行:pluginN+1 = plugins.pluginN+1:pluginN+1_class并且可以使用pluginN + 1.
我尝试/学到了什么:
在/usr/share/my_project_dir/venv/bin/activate我打开一个Python交互式shell并迭代之后pkg_resources.iter_entry_points(),它列出了从setup.py的初始状态加载的所有东西(即plugin1到pluginN)
如果我添加一行setup.py并 …