Я ищу методы, позволяющие пользователям переопределять модули в приложении или расширять приложение новыми модулями.
Представьте себе приложение под названием pydraw. В настоящее время он предоставляет класс Circle, который наследует Shape. Дерево пакетов может выглядеть так:
/usr/lib/python/
└── pydraw
├── __init__.py
├── shape.py
└── shapes
├── circle.py
└── __init__.py
Теперь предположим, что я хочу включить динамическое обнаружение и загрузку пользовательских модулей, реализующих новую форму, или, возможно, даже самого класса Shape. Кажется наиболее простым, чтобы дерево пользователя имело ту же структуру, что и дерево приложения, например:
/home/someuser/python/
└── pydraw
├── __init__.py
├── shape.py <-- new superclass
└── shapes
├── __init__.py
└── square.py <-- new user class
Другими словами, я хотел бы наложить и замаскировать дерево приложения с помощью файлов с тем же именем из дерева пользователя, или по крайней мере, получить эту очевидную структуру с точки зрения Python.
Затем, настроив sys.path или PYTHONPATH, pydraw.shapes.square может быть обнаружен. Однако поиск по пути к модулю Python не находит такие модули, как square.py. Я предполагаю, что это потому, что __ method __
уже содержит родительский модуль по другому пути.
Как бы вы выполнили эту задачу с помощью Python?