НейроАгент

Исправить ошибку 'filename does not exists' в Docling

Решение проблемы отсутствия файлов ресурсов в Docling при конвертации PDF в Markdown. Пошаговые методы устранения ошибки и предотвращения будущих проблем.

Вопрос

Как исправить ошибку ‘filename does not exists’ при использовании библиотеки Docling для конвертации PDF в Markdown?

Я пытаюсь запустить пример кода из официальной документации Docling:

python
from docling.document_converter import DocumentConverter

source = "https://arxiv.org/pdf/2408.09869"

converter = DocumentConverter()
result = converter.convert(source)

print(result.document.export_to_markdown())

Но получаю следующую ошибку:

RuntimeError: filename does not exists: C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling_parse\pdf_resources_v2/glyphs//standard/additional.dat

Полный трейсбек:

Traceback (most recent call last):
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\datamodel\document.py", line 171, in __init__
    self._init_doc(backend, path_or_stream)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\datamodel\document.py", line 215, in _init_doc
    self._backend = backend(self, path_or_stream=path_or_stream)
                    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\backend\docling_parse_v4_backend.py", line 206, in __init__
    self.parser = DoclingPdfParser(loglevel="fatal")
                  ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling_parse\pdf_parser.py", line 579, in __init__
    self.parser = pdf_parser_v2(level=loglevel)
                  ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
RuntimeError: filename does not exists: C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling_parse\pdf_resources_v2/glyphs//standard/additional.dat
2025-10-28 20:18:53,881 - INFO - Going to convert document batch...
Traceback (most recent call last):
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\docling_test\docling1.py", line 10, in <module>
    result = converter.convert(source)
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\pydantic\_internal\_validate_call.py", line 39, in wrapper_function
    return wrapper(*args, **kwargs)
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\pydantic\_internal\_validate_call.py", line 136, in __call__
    res = self.__pydantic_validator__.validate_python(pydantic_core.ArgsKwargs(args, kwargs))
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 237, in convert
    return next(all_res)
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 260, in convert_all
    for conv_res in conv_res_iter:
                    ^^^^^^^^^^^^^
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 332, in _convert
    for item in map(
                ~~~^
        process_func,
        ^^^^^^^^^^^^^
        input_batch,
        ^^^^^^^^^^^^
    ):
    ^
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 379, in _process_document
    conv_res = self._execute_pipeline(in_doc, raises_on_error=raises_on_error)
  File "C:\Usersакс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 415, in _execute_pipeline
    raise ConversionError(f"Input document {in_doc.file} is not valid.")
docling.exceptions.ConversionError: Input document 2408.09869v5.pdf is not valid.
-> Cannot close object, library is destroyed. This may cause a memory leak!

Этот же код успешно работает на другом компьютере. В чем может быть проблема и как её исправить?

НейроАгент

Ошибка filename does not exists: ...additional.dat в библиотеке Docling возникает из-за отсутствия или повреждения ресурсных файлов, необходимых для парсинга PDF-документов. Это распространенная проблема, связанная с установленной версией Docling или конфигурацией окружения, и она успешно решается несколькими способами.

Содержание

Причины возникновения ошибки

Ошибка указывает на отсутствие файла additional.dat в директории ресурсов Docling. Основные причины включают:

  1. Неполная или поврежденная установка - ресурсные файлы не были установлены корректно
  2. Проблемы с правами доступа - библиотека не может получить доступ к файлам ресурсов
  3. Конфликт версий - несоответствие между версиями Docling и его зависимостей
  4. Отсутствие необходимых переменных окружения - путь к ресурсам не настроен

Судя по вашему трейсбеку, проблема возникает в момент инициализации парсера PDF в файле docling_parse_v4_backend.py, что подтверждает ресурсно-ориентированную природу ошибки.

Основные решения проблемы

1. Установка путей к артефактам через переменную окружения

Наиболее эффективное решение, основанное на исследованиях проблемы на GitHub:

python
import os
from docling.document_converter import DocumentConverter

# Установка пути к артефактам
os.environ["DOCLING_ARTIFACTS_PATH"] = "/путь/к/директории/артефактов"

source = "https://arxiv.org/pdf/2408.09869"
converter = DocumentConverter()
result = converter.convert(source)
print(result.document.export_to_markdown())

2. Переустановка Docling с очисткой кэша

bash
# Полная переустановка библиотеки
pip uninstall docling docling-parse
pip install docling --no-cache-dir

# Или с использованием pip cache purge
pip cache purge
pip install docling

3. Настройка опций конвертера с указанием путей

python
from docling.document_converter import DocumentConverter
from docling.datamodel.pipeline_options import PdfPipelineOptions
import os

# Создание директории для артефактов если ее нет
artifacts_path = "./docling_artifacts"
os.makedirs(artifacts_path, exist_ok=True)

# Настройка опций с явным указанием путей
pdf_pipeline_options = PdfPipelineOptions(
    artifacts_path=artifacts_path,
    generate_page_images=False,
    generate_picture_images=False,
)

# Создание конвертера с опциями
converter = DocumentConverter(
    format_options={
        "pdf": {
            "pipeline_options": pdf_pipeline_options
        }
    }
)

source = "https://arxiv.org/pdf/2408.09869"
result = converter.convert(source)

Дополнительные методы устранения

4. Проверка и исправление путей установки

Если проблема сохраняется, проверьте физическое наличие файлов ресурсов:

python
import sys
from pathlib import Path

# Проверка путей установки
for path in sys.path:
    resource_path = Path(path) / "docling_parse" / "pdf_resources_v2" / "glyphs" / "standard" / "additional.dat"
    if resource_path.exists():
        print(f"Файл найден: {resource_path}")
    else:
        print(f"Файл отсутствует: {resource_path}")

5. Использование альтернативного бэкенда

Если стандартный бэкенд вызывает проблемы, попробуйте использовать PyPdfium2:

python
from docling.document_converter import DocumentConverter
from docling.backend.pypdfium2_backend import PyPdfiumDocumentBackend

# Использование альтернативного бэкенда
converter = DocumentConverter(backend_class=PyPdfiumDocumentBackend)

source = "https://arxiv.org/pdf/2408.09869"
result = converter.convert(source)
print(result.document.export_to_markdown())

6. Отключение ненужных функций для снижения требований к ресурсам

python
from docling.document_converter import DocumentConverter
from docling.datamodel.pipeline_options import PdfPipelineOptions, AcceleratorOptions, EasyOcrOptions

pdf_pipeline_options = PdfPipelineOptions(
    accelerator_options=AcceleratorOptions(device="auto"),
    ocr_options=EasyOcrOptions(force_full_page_ocr=False, use_gpu=False),
    do_ocr=False,  # Отключение OCR если не требуется
    table_structure_options=None,  # Отключение распознавания таблиц
    generate_page_images=False,
    generate_picture_images=False,
)

converter = DocumentConverter(
    format_options={
        "pdf": {
            "pipeline_options": pdf_pipeline_options
        }
    }
)

Предотвращение будущих ошибок

7. Использование виртуального окружения с изолированной установкой

bash
# Создание чистого окружения
python -m venv clean_docling_env
source clean_docling_env/bin/activate  # Для Linux/Mac
# или
clean_docling_env\Scripts\activate  # Для Windows

# Установка в чистом окружении
pip install docling

8. Регулярное обновление библиотеки

bash
pip install --upgrade docling

9. Мониторинг использования ресурсов

Добавьте логирование для диагностики проблем:

python
import logging
from docling.document_converter import DocumentConverter

# Настройка логирования
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

converter = DocumentConverter()
try:
    result = converter.convert("https://arxiv.org/pdf/2408.09869")
    print(result.document.export_to_markdown())
except Exception as e:
    logger.error(f"Ошибка конвертации: {e}")

Проверка и диагностика

10. Тестовая проверка установки

Создайте тестовый скрипт для проверки корректности установки:

python
from docling.document_converter import DocumentConverter
import os

def test_docling_installation():
    try:
        # Проверка базовой функциональности
        converter = DocumentConverter()
        print("✓ Базовый конвертер создан успешно")
        
        # Проверка путей к ресурсам
        import sys
        from pathlib import Path
        
        for path in sys.path:
            resource_dir = Path(path) / "docling_parse" / "pdf_resources_v2"
            if resource_dir.exists():
                print(f"✓ Директория ресурсов найдена: {resource_dir}")
                return True
        
        print("✗ Директория ресурсов не найдена")
        return False
        
    except Exception as e:
        print(f"✗ Ошибка при проверке: {e}")
        return False

if __name__ == "__main__":
    test_docling_installation()

Если все методы не помогают, возможно, стоит обратиться к официальному репозиторию Docling на GitHub или изучить существующие issues, так как проблема может быть связана с конкретной версией библиотеки или особенностью вашей системы.

Источники

  1. Failed to parse pdf from docling >= 2.24 · Issue #1064 · docling-project/docling
  2. Docling FAQ - Официальная документация
  3. Docling CLI reference - Официальная документация
  4. Docling Usage - Официальная документация
  5. Microsoft Q&A - Azure Function crashes with Docling

Заключение

Ошибка filename does not exists в Docling обычно решается комбинацией установки переменной окружения DOCLING_ARTIFACTS_PATH, переустановки библиотеки и настройки опций конвертера. В большинстве случаев достаточно использовать первый метод с установкой пути к артефактам. Если проблема сохраняется, рекомендуется проверить наличие файлов ресурсов в директории установки или использовать альтернативные бэкенды. Для предотвращения подобных проблем в будущем используйте чистые виртуальные окружения и регулярно обновляйте библиотеку.