[feat] Dynamic import based on the available dependencies #65
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
After this update, layout-parser would support the
_LazyModule
(originally from the transformers repo) that enables more flexible imports and dependency management.For all OCR and LayoutModels, it may require additional dependencies installed beyond the base layout-parser implementation. Previously we resort to the method
_import_module
that binds the loading of the external dependencies to the specific classes. As a result, the import of the required dependencies should be handled within the classes, adding complexity to the model implementation.In the new updates, the additional dependencies is handled at the library level: if the dependencies is not available, the actual python file for the corresponding class won't be imported and loaded as a part of the library. For example, if
Detectron2
is not installed, after runningimport layoutparser as lp
, thelp
object even won't have the attributeDetectron2LayoutModel
. This decouples the requirements with the corresponding class, and makes it easier to implement new models.