2025, Nov 09 18:02
Как исправить PermissionError при удалении pdfminer.six через pip
Решение PermissionError при pip uninstall системных пакетов: почему из-за /usr/lib/python3/dist-packages и как удалить pdfminer.six через apt или sudo pip
Удаление пакета Python обычно не вызывает сложностей, но если при попытке удалить, например, pdfminer.six появляется PermissionError: [Errno 13] Permission denied, скорее всего, вы имеете дело с системной установкой из /usr/lib/python3/dist-packages/. Ниже — почему так происходит и как аккуратно удалить пакет, ничего не сломав.
Как воспроизвести проблему
Вот как обычно выглядит сбой при попытке удалить pdfminer.six напрямую через pip:
pip uninstall pdfminer.six
Found existing installation: pdfminer.six -VERSION-
Uninstalling pdfminer.six--VERSION-:
Would remove:
/usr/lib/python3/dist-packages/pdfminer
/usr/lib/python3/dist-packages/pdfminer.six-_VERSION_.egg-info
Proceed (Y/n)? Y
ERROR: Exception:
Traceback (most recent call last):
...
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3/dist-packages/pdfminer' -> '/tmp/pip-uninstall-xxxxxxx'
В схожих ситуациях с другими пакетами для работы с PDF (например, ocrmypdf или pikepdf) ошибка проявляется так же; меняется лишь имя файла в конце сообщения.
PermissionError: [Errno 13] Permission denied
Что на самом деле происходит
Главная подсказка — путь установки: /usr/lib/python3/dist-packages/. Всё, что лежит в этом каталоге, установлено на уровне системы. Такие пакеты попадают туда либо через системный менеджер пакетов (apt/apt-get и т. п.), либо через pip, запущенный с повышенными правами. Какой бы инструмент ни поместил файлы в эту директорию, для их удаления нужны права root. Если pip запускается без нужных разрешений, он не может перемещать или удалять эти файлы, и деинсталляция завершается с ошибкой PermissionError.
Как правильно удалить пакет
Сначала сопоставьте инструмент удаления со способом установки пакета. Если его ставили через системный менеджер пакетов, имя пакета отличается от имени импортируемого модуля Python. В нашем случае в apt он называется python3-pdfminer, а не pdfminer.six. Если пакет установил pip на системный уровень, запускать pip для удаления нужно с правами суперпользователя, чтобы он смог убирать файлы из /usr/lib/python3/dist-packages/.
Выберите один из следующих вариантов — в зависимости от того, откуда появился пакет:
sudo apt remove python3-pdfminer
sudo pip uninstall pdfminer.six
Если вы не уверены, какой путь выбрать, можно быстро проверить, «видит» ли пакет системный менеджер: найдите его по имени и посмотрите, появляется ли он в результатах.
Почему это важно
Системные и пользовательские окружения Python подчиняются разным правилам владения и прав доступа. Их смешение приводит к запутанным эффектам — например, pip не может удалить файлы, которыми управляет ОС, или наоборот. Понимание пути установки и того, какой инструмент «владеет» файлами, помогает избегать ошибок с правами и поддерживать согласованность стека Python.
Итоги
Если пакет лежит в /usr/lib/python3/dist-packages/, воспринимайте его как системную установку. Для удаления используйте подходящий инструмент и верное имя пакета: python3-pdfminer для apt и pdfminer.six для pip. Если pip предупреждает о запуске от root — это нормально при работе с файлами, принадлежащими системе; важно согласовать инструмент и права с исходным способом установки. В повседневной разработке удобнее изолировать зависимости в виртуальном окружении, чтобы не пересекать системную и проектную среды.