Я разрабатываю слабый бот с плагинами, использующими точки входа. Я хочу динамически добавлять плагин во время выполнения.
У меня есть проект с этой структурой:
+ ~/my_project_dir/
+ my_projects_python_code/
+ plugins/
- plugin1.py
- plugin2.py
- ...
- pluginN.py
- setup.py
- venv/
- install.sh
Мой файл 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
"""
)
Запуск sudo install.sh
выполняет следующие действия:
-
Копирует необходимые файлы в
/usr/share/my_project_dir/
-
Активируйте virtualenv на
/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 и перебираю черезpkg_resources.iter_entry_points()
, в котором перечисляются все, что было загружено из начального состояния setup.py(т.е. плагин1 через плагинN) -
Если я добавлю строку в
setup.py
и запустимsudo python setup.py develop
и снова перейду с той же оболочкой Python, она не заберет новый плагин, но если я выйду из оболочки и снова ее открою, плагин получает. -
Я заметил, что когда я устанавливаю бота, часть вывода говорит:
-
Copying My_Project_plugins-1.0-py2.7.egg to /usr/share/my_project-dir/venv/lib/python2.7/site-packages
-
-
Когда я
cd /usr/share/my_project_dir/
, активируйте мой virtualenv и запуститеsetup.py
из оболочки, в которой говорится:-
Creating /usr/local/lib/python2.7/dist-packages/My_Project-plugins.egg-link (link to .) My_Project-plugins 1.0 is already the active version in easy-install.pth
-