Hi
we are tryin to install an app on the frappe cloud. but it seems that there’s a dependency missing. Error Below. Since we can’t install the dependency and we can’t (or don’t know how to contact the developper) how can you help to install this app?
Installing invoice_ocr…
Updating DocTypes for invoice_ocr : [==================== ] 50%An error occurred while installing invoice_ocr: Module import failed for Invoice Upload, the DocType you’re trying to open might be deleted.
Error: No module named ‘pytesseract’
Traceback with variables (most recent call last):
File “apps/frappe/frappe/commands/site.py”, line 484, in install_app
_install_app(app, verbose=context.verbose, force=force)
context = {‘sites’: [‘ocrtest.c.frappe.cloud’], ‘force’: False, ‘verbose’: False, ‘profile’: False}
apps = (‘invoice_ocr’,)
force = True
_install_app = <function install_app at 0x7f5b0c48ad40>
filelock = <function filelock at 0x7f5b0d469120>
exit_code = 0
site = ‘ocrtest.c.frappe.cloud’
app = ‘invoice_ocr’
err = ImportError(“Module import failed for Invoice Upload, the DocType you’re trying to open might be deleted.\nError: No module named ‘pytesseract’”)
File “apps/frappe/frappe/installer.py”, line 316, in install_app
sync_for(name, force=force, reset_permissions=True)
name = ‘invoice_ocr’
verbose = False
set_as_patched = True
force = True
sync_jobs = <function sync_jobs at 0x7f5b0b8ff740>
sync_for = <function sync_for at 0x7f5b0b910900>
sync_customizations = <function sync_customizations at 0x7f5b0d2bc0e0>
sync_fixtures = <function sync_fixtures at 0x7f5b0b910ae0>
app_hooks = {‘app_description’: [‘invoice ocr’], ‘app_email’: [‘shoaibmohtashim973@gmail.com’], ‘app_license’: [‘mit’], ‘app_name’: [‘invoice_ocr’], ‘app_publisher’: [‘mohtashim’], ‘app_title’: [‘Invoice Ocr’]}
installed_apps = [‘frappe’, ‘erpnext’]
File “apps/frappe/frappe/model/sync.py”, line 112, in sync_for
import_file_by_path(
app_name = ‘invoice_ocr’
force = True
reset_permissions = True
files = [‘apps/invoice_ocr/invoice_ocr/invoice_ocr/doctype/invoice_upload_item/invoice_upload_item.json’, ‘apps/invoice_ocr/invoice_ocr/invoice_ocr/doctype/invoice_upload/invoice_upload.json’]
module_name = ‘invoice_ocr’
folder = ‘apps/invoice_ocr/invoice_ocr/invoice_ocr’
l = 2
i = 1
doc_path = ‘apps/invoice_ocr/invoice_ocr/invoice_ocr/doctype/invoice_upload/invoice_upload.json’
File “apps/frappe/frappe/modules/import_file.py”, line 146, in import_file_by_path
import_doc(
path = ‘apps/invoice_ocr/invoice_ocr/invoice_ocr/doctype/invoice_upload/invoice_upload.json’
force = True
data_import = False
pre_process = None
ignore_version = True
reset_permissions = True
docs = [{‘actions’: , ‘allow_rename’: 1, ‘autoname’: ‘format:IU-{YY}-{MM}-{###}’, ‘creation’: ‘2025-05-24 00:30:47.121979’, ‘doctype’: ‘DocType’, ‘engine’: ‘InnoDB’, ‘fields’: [{‘fieldname’: ‘party_type’, ‘fieldtype’: ‘Select’, ‘label’: ‘Party Type’, ‘options’: ‘Customer\nSupplier’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘party’, ‘fieldtype’: ‘Dynamic Link’, ‘label’: ‘Party’, ‘options’: ‘party_type’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘create_invoice’, ‘fieldtype’: ‘Button’, ‘label’: ‘Create Invoice’, ‘doctype’: ‘DocField’}, {‘default’: ‘Today’, ‘fieldname’: ‘date’, ‘fieldtype’: ‘Date’, ‘label’: ‘Date’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘column_break_wauc’, ‘fieldtype’: ‘Column Break’, ‘doctype’: ‘DocField’}, {‘allow_on_submit’: 1, ‘fieldname’: ‘file’, ‘fieldtype’: ‘Attach’, ‘label’: ‘Upload File’, ‘doctype’: ‘DocField’}, {‘allow_on_submit’: 1, ‘fieldname’: ‘ocr_status’, ‘fieldtype’: ‘Select’, ‘label’: ‘OCR Status’, ‘options’: ‘Pending\nProcessing\nExtracted\nFailed’, ‘doctype’: 'DocF…
calculated_hash = ‘1d3156425c77eb112bceff5d6eb491d2’
doc = {‘actions’: , ‘allow_rename’: 1, ‘autoname’: ‘format:IU-{YY}-{MM}-{###}’, ‘creation’: ‘2025-05-24 00:30:47.121979’, ‘doctype’: ‘DocType’, ‘engine’: ‘InnoDB’, ‘fields’: [{‘fieldname’: ‘party_type’, ‘fieldtype’: ‘Select’, ‘label’: ‘Party Type’, ‘options’: ‘Customer\nSupplier’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘party’, ‘fieldtype’: ‘Dynamic Link’, ‘label’: ‘Party’, ‘options’: ‘party_type’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘create_invoice’, ‘fieldtype’: ‘Button’, ‘label’: ‘Create Invoice’, ‘doctype’: ‘DocField’}, {‘default’: ‘Today’, ‘fieldname’: ‘date’, ‘fieldtype’: ‘Date’, ‘label’: ‘Date’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘column_break_wauc’, ‘fieldtype’: ‘Column Break’, ‘doctype’: ‘DocField’}, {‘allow_on_submit’: 1, ‘fieldname’: ‘file’, ‘fieldtype’: ‘Attach’, ‘label’: ‘Upload File’, ‘doctype’: ‘DocField’}, {‘allow_on_submit’: 1, ‘fieldname’: ‘ocr_status’, ‘fieldtype’: ‘Select’, ‘label’: ‘OCR Status’, ‘options’: ‘Pending\nProcessing\nExtracted\nFailed’, ‘doctype’: 'DocFi…
db_modified_timestamp = datetime.datetime(2025, 10, 1, 10, 39, 28, 408499)
is_db_timestamp_latest = True
File “apps/frappe/frappe/modules/import_file.py”, line 239, in import_doc
doc.insert()
docdict = {‘actions’: , ‘allow_rename’: 1, ‘autoname’: ‘format:IU-{YY}-{MM}-{###}’, ‘creation’: ‘2025-05-24 00:30:47.121979’, ‘doctype’: ‘DocType’, ‘engine’: ‘InnoDB’, ‘fields’: [{‘fieldname’: ‘party_type’, ‘fieldtype’: ‘Select’, ‘label’: ‘Party Type’, ‘options’: ‘Customer\nSupplier’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘party’, ‘fieldtype’: ‘Dynamic Link’, ‘label’: ‘Party’, ‘options’: ‘party_type’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘create_invoice’, ‘fieldtype’: ‘Button’, ‘label’: ‘Create Invoice’, ‘doctype’: ‘DocField’}, {‘default’: ‘Today’, ‘fieldname’: ‘date’, ‘fieldtype’: ‘Date’, ‘label’: ‘Date’, ‘doctype’: ‘DocField’}, {‘fieldname’: ‘column_break_wauc’, ‘fieldtype’: ‘Column Break’, ‘doctype’: ‘DocField’}, {‘allow_on_submit’: 1, ‘fieldname’: ‘file’, ‘fieldtype’: ‘Attach’, ‘label’: ‘Upload File’, ‘doctype’: ‘DocField’}, {‘allow_on_submit’: 1, ‘fieldname’: ‘ocr_status’, ‘fieldtype’: ‘Select’, ‘label’: ‘OCR Status’, ‘options’: ‘Pending\nProcessing\nExtracted\nFailed’, ‘doctype’: ‘DocFi…
data_import = False
pre_process = None
ignore_version = True
reset_permissions = True
path = ‘apps/invoice_ocr/invoice_ocr/invoice_ocr/doctype/invoice_upload/invoice_upload.json’
controller = <class ‘frappe.core.doctype.doctype.doctype.DocType’>
doc = <DocType: Invoice Upload>
File “apps/frappe/frappe/model/document.py”, line 334, in insert
self.run_post_save_methods()
self = <DocType: Invoice Upload>
ignore_permissions = None
ignore_links = None
ignore_if_duplicate = False
ignore_mandatory = None
set_name = None
set_child_names = True
d = <DocPerm: 6q4jeorn37 parent=Invoice Upload>
File “apps/frappe/frappe/model/document.py”, line 1177, in run_post_save_methods
self.run_method(“on_update”)
self = <DocType: Invoice Upload>
File “apps/frappe/frappe/model/document.py”, line 1011, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
self = <DocType: Invoice Upload>
method = ‘on_update’
args = ()
kwargs = {}
fn = <function Document.run_method..fn at 0x7f5b0a37eac0>
File “apps/frappe/frappe/model/document.py”, line 1371, in composer
return composed(self, method, args, **kwargs)
self = <DocType: Invoice Upload>
args = ()
kwargs = {}
hooks = [<function build_domain_restriced_doctype_cache at 0x7f5b0d2d82c0>, <function clear_doctype_notifications at 0x7f5b0a6634c0>, <function process_workflow_actions at 0x7f5b0a4dba60>, <function attach_files_to_document at 0x7f5b0dc5cc20>, <function apply at 0x7f5b0a4f2980>, <function update_due_date at 0x7f5b0a4f2a20>, <function apply_permissions_for_non_standard_user_type at 0x7f5b0a508220>, <function update_doc_index at 0x7f5b0aa53d80>]
method = ‘on_update’
doc_events = {'’: {‘on_update’: [‘frappe.desk.notifications.clear_doctype_notifications’, ‘frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions’, ‘frappe.core.doctype.file.utils.attach_files_to_document’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.apply’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.update_due_date’, ‘frappe.core.doctype.user_type.user_type.apply_permissions_for_non_standard_user_type’, ‘frappe.search.sqlite_search.update_doc_index’], ‘after_rename’: [‘frappe.desk.notifications.clear_doctype_notifications’], ‘on_cancel’: [‘frappe.desk.notifications.clear_doctype_notifications’, ‘frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.apply’], ‘on_trash’: [‘frappe.desk.notifications.clear_doctype_notifications’, ‘frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions’, ‘frappe.search.sqlite_search.delete_doc_index’…
handler = ‘frappe.search.sqlite_search.update_doc_index’
composed = <function Document.hook..compose..runner at 0x7f5b0a37efc0>
compose = <function Document.hook..compose at 0x7f5b0a37ef20>
f = <function Document.run_method..fn at 0x7f5b0a37eac0>
File “apps/frappe/frappe/model/document.py”, line 1353, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
self = <DocType: Invoice Upload>
method = ‘on_update’
args = ()
kwargs = {}
add_to_return_value = <function Document.hook..add_to_return_value at 0x7f5b0a37ee80>
fn = <function Document.run_method..fn at 0x7f5b0a37eac0>
hooks = (<function build_domain_restriced_doctype_cache at 0x7f5b0d2d82c0>, <function clear_doctype_notifications at 0x7f5b0a6634c0>, <function process_workflow_actions at 0x7f5b0a4dba60>, <function attach_files_to_document at 0x7f5b0dc5cc20>, <function apply at 0x7f5b0a4f2980>, <function update_due_date at 0x7f5b0a4f2a20>, <function apply_permissions_for_non_standard_user_type at 0x7f5b0a508220>, <function update_doc_index at 0x7f5b0aa53d80>)
File “apps/frappe/frappe/model/document.py”, line 1008, in fn
return method_object(*args, **kwargs)
self = <DocType: Invoice Upload>
args = ()
kwargs = {}
method_object = <bound method DocType.on_update of <DocType: Invoice Upload>>
method = ‘on_update’
File “apps/frappe/frappe/core/doctype/doctype/doctype.py”, line 536, in on_update
self.run_module_method(“on_doctype_update”)
self = <DocType: Invoice Upload>
allow_doctype_export = False
File “apps/frappe/frappe/core/doctype/doctype/doctype.py”, line 634, in run_module_method
module = load_doctype_module(self.name, self.module)
self = <DocType: Invoice Upload>
method = ‘on_doctype_update’
load_doctype_module = <function load_doctype_module at 0x7f5b0d2bc720>
File “apps/frappe/frappe/modules/utils.py”, line 259, in load_doctype_module
raise ImportError(msg) from e
doctype = ‘Invoice Upload’
module = ‘Invoice Ocr’
prefix = ‘’
suffix = ‘’
app = ‘invoice_ocr’
key = ********
module_name = ‘invoice_ocr.invoice_ocr.doctype.invoice_upload.invoice_upload’
msg = “Module import failed for Invoice Upload, the DocType you’re trying to open might be deleted.\nError: No module named ‘pytesseract’”
builtins.ImportError: Module import failed for Invoice Upload, the DocType you’re trying to open might be deleted.
Error: No module named ‘pytesseract’