pip3 сталкивается с ошибками разрешений при запуске вне виртуального окружения

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

Я пытался установить CrackMapExec (CME) на Ubuntu сегодня днем, и документация CME предложила установить pipx и управлять установкой CME через pipx, чтобы избежать проблем с зависимостями. Я пытался установить pipx как пользователь с низкими привилегиями, но это не удалось. Затем я установил pipx с помощью sudo, и это, похоже, нарушило права доступа, так что я больше не могу запускать pip3 как пользователь с низкими привилегиями:

user@box:/usr/lib/python3/dist-packages/pip$ pip3 --version
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", line 24, in <module>
    from pip._internal.exceptions import CommandError
  File "/usr/lib/python3/dist-packages/pip/_internal/exceptions.py", line 10, in <module>
    from pip._vendor.six import iteritems
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 79, in <module>
    vendored("pkg_resources")
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 36, in vendored
    __import__(modulename, globals(), locals(), level=0)
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
  File "<frozen zipimport>", line 259, in load_module
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3252, in <module>
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3235, in _call_aside
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3264, in _initialize_master_working_set
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 574, in _build_master
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 567, in __init__
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 623, in add_entry
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2065, in find_on_path
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2127, in distributions_from_metadata
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/dist-packages/yarl-1.7.0.dist-info'

Однако, если я использую ранее созданный виртуальный окружение или создаю новое виртуальное окружение, у меня нет проблем:

user@box:/opt/Tools$ cd spiderfoot/
user@box:/opt/Tools/spiderfoot$ virtualenv .spiderfoot

создано виртуальное окружение CPython3.8.10.final.0-64 за 264мс
  создатель CPython3Posix(dest=/opt/Tools/spiderfoot/.spiderfoot, clear=False, no_vcs_ignore=False, global=False)
  посевщик FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/bleiden/.local/share/virtualenv)
    добавлены посевные пакеты: pip==21.2.4, setuptools==58.1.0, wheel==0.37.0
  активаторы BashActivator, CShellActivator, FishActivator, NushellActivator, PowerShellActivator, PythonActivator 

user@box:/opt/Tools/spiderfoot$ source .spiderfoot/bin/activate
(.spiderfoot) user@box:/opt/Tools/spiderfoot$ pip3 --version
pip 21.2.4 из /opt/Tools/spiderfoot/.spiderfoot/lib/python3.8/site-packages/pip (python 3.8)
(.spiderfoot) user@box:/opt/Tools/spiderfoot$ deactivate 

user@box:/opt/Tools/spiderfoot$ pip3 --version
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", line 24, in <module>
    from pip._internal.exceptions import CommandError
  File "/usr/lib/python3/dist-packages/pip/_internal/exceptions.py", line 10, in <module>
    from pip._vendor.six import iteritems
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 79, in <module>
    vendored("pkg_resources")
  File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 36, in vendored
    __import__(modulename, globals(), locals(), level=0)
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
  File "<frozen zipimport>", line 259, in load_module
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3252, in <module>
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3235, in _call_aside
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 3264, in _initialize_master_working_set
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 574, in _build_master
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 567, in __init__
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 623, in add_entry
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2065, in find_on_path
  File "/usr/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl/pkg_resources/__init__.py", line 2127, in distributions_from_metadata
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/dist-packages/yarl-1.7.0.dist-info'

Я пытался удалить и переустановить python3-pip через apt, но это не решило проблему. Изменение владельца папки dist-packages на мой идентификатор пользователя, вероятно, не является вариантом, так как я не единственный пользователь на этой машине, кому нужен python. Любая помощь, которую вы можете предоставить, будет очень ценна.

У меня была такая же проблема, и sudo chmod a+r -R /usr/local/lib/python3.8/dist-packages/ сработало для меня.

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

Решение проблемы с ошибками разрешений при использовании pip3 вне виртуальной среды на Ubuntu

Когда вы работаете с Python и pip (или pip3), ошибки разрешения могут значительно затруднить установку и управление пакетами. Ваша ситуация с установкой CrackMapExec (CME) и subsequent проблемами, связанными с правами доступа, является довольно распространенной. Давайте подробно разберем эту проблему и предложим возможные решения.

Проблема

Вы столкнулись с ошибкой разрешений, когда пытались использовать pip3 после установки pipx с правами администратора (sudo):

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.8/dist-packages/yarl-1.7.0.dist-info'

Эта ошибка указывает на то, что ваша учетная запись не имеет достаточных прав для доступа к файлам, находящимся в directory /usr/local/lib/python3.8/dist-packages/, которые, вероятно, были изменены в результате установки pipx с помощью sudo.

Причины

  1. Учетные записи с различными привилегиями: Установка pipx с использованием sudo создает файлы и директории, принадлежащие пользователю root, и поэтому обычные пользователи не могут их редактировать.

  2. Изменение прав доступа: Если pipx или pip3 используют разные наборы пакетов, то недоступные пути могут вызвать проблемы.

  3. Установка зависимостей: Процесс установки может зависеть от файлов, принадлежащих другой учетной записи, нарушая целостность окружения Python.

Возможные решения

Метод 1: Изменение прав доступа

Как уже упоминалось в вашем обсуждении, изменение прав доступа к каталогу может решить вашу проблему. Вот команда, которая может помочь:

sudo chmod a+r -R /usr/local/lib/python3.8/dist-packages/

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

Метод 2: Переустановка pip

Если изменение прав доступа не решает проблему, вы можете попробовать полностью удалить и затем переустановить pip, чтобы восстановить его первоначальные права доступа:

sudo apt remove python3-pip
sudo apt install python3-pip

Этот процесс может помочь восстановить правильные права доступа к файлам и директориям.

Метод 3: Установка в виртуальной среде

Использование виртуальных окружений — это лучший способ изолировать ваши проекты Python. Если pip3 работает корректно в виртуальной среде, но не вне ее, это означает, что ваша основная установка Python имеет конфликты или проблемы с правами доступа.

Создайте новое виртуальное окружение и активируйте его:

virtualenv myenv
source myenv/bin/activate

Мы настоятельно рекомендуем использовать виртуальные окружения для каждого проекта. Это не только помогает избежать проблем с зависимостями, но и предотвращает конфликты между пакетами.

Метод 4: Профилактика в будущем

Чтобы избежать будущих проблем с установкой пакетов и правами доступа, следуйте этим рекомендациям:

  • Используйте pipx для установки Python приложений программного обеспечения, чтобы избежать конфликта версий и прав. Убедитесь, что pipx установлен для вашего пользователя, а не с использованием sudo.
  • Избегайте установки пакетов в систему с использованием sudo, если это возможно. Всегда старайтесь использовать виртуальные окружения или pipx для управления пакетами.

Заключение

Ошибки разрешений при использовании pip3 на Ubuntu могут привести к значительным последствиям в управлении проектами на Python. Подводя итог, лучше всего использовать виртуальные окружения, чтобы минимизировать подобные проблемы. Если вы столкнулись с конкретными ошибками, не стесняйтесь делиться ими, чтобы получить более целенаправленное решение.

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

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