ocrmypdf не работает на 24.04, возникают ошибки Python.

Вопрос или проблема

ocrmypdf не удается для некоторых ID на 24.04. Исключением является ID, который выполнил sudo apt install ocrmypdf, работает корректно. Запуск sudo ocrmypdf также работает. Почему он не работает для всех, кроме ID, который выполнил sudo apt install? Все ID на системе 22.04 могут запускать ocrmypdf.

Строка текста, представляющая ошибку, следующая:

An exception occurred while executing the pipeline                  _sync.py:473
Traceback (most recent call last):                                              
  File "/usr/lib/python3/dist-packages/ocrmypdf/_sync.py", line                 
409, in run_pipeline                                                            
    optimize_messages = exec_concurrent(context, executor)                      
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                      
  File "/usr/lib/python3/dist-packages/ocrmypdf/_sync.py", line                 
315, in exec_concurrent                                                         
    pdf, messages = post_process(pdf, context, executor)                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
  File "/usr/lib/python3/dist-packages/ocrmypdf/_sync.py", line                 
247, in post_process                                                            
    return optimize_pdf(pdf_out, context, executor)                             
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                             
  File "/usr/lib/python3/dist-packages/ocrmypdf/_pipeline.py", line             
1009, in optimize_pdf                                                           
    output_pdf, messages =                                                      
context.plugin_manager.hook.optimize_pdf(                                       
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             
^                                                                               
  File "/usr/lib/python3/dist-packages/pluggy/_hooks.py", line 501,             
in __call__                                                                     
    return self._hookexec(self.name, self._hookimpls.copy(),                    
kwargs, firstresult)                                                            
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             
^^^^^^^^^^^^^^                                                                  
  File "/usr/lib/python3/dist-packages/pluggy/_manager.py", line                
119, in _hookexec                                                               
    return self._inner_hookexec(hook_name, methods, kwargs,                     
firstresult)                                                                    
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             
^^^^^                                                                           
  File "/usr/lib/python3/dist-packages/pluggy/_callers.py", line                
138, in _multicall                                                              
    raise exception.with_traceback(exception.__traceback__)                     
  File "/usr/lib/python3/dist-packages/pluggy/_callers.py", line                
102, in _multicall                                                              
    res = hook_impl.function(*args)                                             
          ^^^^^^^^^^^^^^^^^^^^^^^^^                                             
  File                                                                          
"/usr/lib/python3/dist-packages/ocrmypdf/builtin_plugins/optimize.p             
y", line 151, in optimize_pdf                                                   
    'jbig2': jbig2enc.available(),                                              
             ^^^^^^^^^^^^^^^^^^^^                                               
  File "/usr/lib/python3/dist-packages/ocrmypdf/_exec/jbig2enc.py",             
line 22, in available                                                           
    version()                                                                   
  File "/usr/lib/python3/dist-packages/ocrmypdf/_exec/jbig2enc.py",             
line 17, in version                                                             
    return Version(get_version('jbig2', regex=r'jbig2enc                        
(\d+(\.\d+)*).*'))                                                              
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             
^^^^^^^                                                                         
  File                                                                          
"/usr/lib/python3/dist-packages/ocrmypdf/subprocess/__init__.py",               
line 159, in get_version                                                        
    proc = run(                                                                 
           ^^^^                                                                 
  File                                                                          
"/usr/lib/python3/dist-packages/ocrmypdf/subprocess/__init__.py",               
line 63, in run                                                                 
    proc = subprocess_run(args, env=env, check=check, **kwargs)                 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                 
  File "/usr/lib/python3.12/subprocess.py", line 548, in run                    
    with Popen(*popenargs, **kwargs) as process:                                
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^                                            
  File "/usr/lib/python3.12/subprocess.py", line 1026, in __init__              
    self._execute_child(args, executable, preexec_fn, close_fds,                
  File "/usr/lib/python3.12/subprocess.py", line 1955, in                       
_execute_child                                                                  
    raise child_exception_type(errno_num, err_msg, err_filename)                
PermissionError: [Errno 13] Permission denied: 'jbig2'

Ответ или решение

Ваша проблема связана с неудачей при запуске ocrmypdf для некоторых учетных записей на 24.04, при этом она успешно работает только для пользователя, выполнившего установку с помощью sudo apt install ocrmypdf. Запуск команды с использованием sudo ocrmypdf также проходит успешно. Однако, в аналогичной системе 22.04 все учетные записи могут выполнять ocrmypdf без каких-либо ошибок. Давайте рассмотрим возможные причины и решения этой проблемы.

Теория: Понимание проблемы

Основная ошибка, с которой вы столкнулись, — это PermissionError: [Errno 13] Permission denied: 'jbig2'. Эта ошибка указывает на то, что ocrmypdf пытается получить доступ к бинарному файлу jbig2, но не имеет надлежащих разрешений для выполнения этой команды. Поскольку команда работает под sudo или для пользователя, который выполнял установку, это указывает на потенциальную проблему с правами доступа или конфигурацией окружения для других пользователей.

Когда вы запускаете sudo apt install ocrmypdf, программа может быть установлена с зависимостями и правами, доступными только для администратора или для пользователя, выполнившего команду установки. Это может вызвать проблему с доступом к необходимым ресурсам для других пользователей без административных привилегий.

Пример: Объяснение на примере

Предположим, у вас есть два пользователя: admin, выполнивший установку ocrmypdf, и user, который также хочет запустить ocrmypdf, но сталкивается с указанной выше ошибкой. Для admin установка прошла успешно и все бинарные файлы, такие как jbig2, доступны. Когда user пытается использовать ocrmypdf, он сталкивается с отсутствием доступа к jbig2, что вызывает исключение.

Ошибка возникает из-за того, что установка, вероятно, добавила бинарные файлы или библиотеки в путь или директорию, доступную только admin или администраторам системы. Альтернативно, установка могла использовать системные пути или библиотеки, доступные только для sudo.

Применение: Решение проблемы

Чтобы устранить эту ошибку, необходимо убедиться, что все нужные бинарные файлы и зависимости имеют правильные разрешения и могут быть выполнены всеми пользователями, которые должны иметь возможность использовать ocrmypdf. Рассмотрим шаги, которые помогут решить эту проблему:

  1. Проверка разрешений: Убедитесь, что бинарный файл jbig2 и другие зависимости имеют правильные права доступа. Это можно сделать с помощью команды ls -l /path/to/jbig2, которая покажет текущие права доступа. Необходимо, чтобы файл был доступен для чтения и выполнения всеми нужными пользователями.

  2. Настройка PATH: Убедитесь, что директория, содержащая jbig2, добавлена в переменную PATH всех пользователей, которые должны иметь доступ к ocrmypdf. Это можно сделать, добавив соответствующий путь в файл .bashrc или .profile пользователей.

  3. Проверка установленного программного обеспечения: Убедитесь, что все зависимости, необходимые для работы ocrmypdf, установлены и доступны всем пользователям. Это может включать в себя утилиты для обработки PDF или библиотек, которые ocrmypdf требует для выполнения.

  4. Использование ограниченной установки: Если предыдущие шаги не решат проблему, рассмотрите возможность использования установки ocrmypdf через виртуальное окружение или в контейнеризованной среде, что может снизить проблемы с доступом и зависимостями.

  5. Документация и поддержка: Найдите дополнительную информацию по настройке ocrmypdf для многопользовательской среды в официальной документации или обращайтесь за поддержкой в сообщества пользователей Ubuntu или ocrmypdf.

С правильной настройкой разрешений и окружения, фактическое применение решит проблему, и все пользователи смогут использовать ocrmypdf без необходимости прибегать к административным правам.

Оцените материал
Добавить комментарий

Капча загружается...