pkg_ресурсы.Дистрибутив не найден: Дистрибутив «platformdirs=2» не найден и требуется virtualenv

#python-3.x #pip #virtualenv

Вопрос:

Я пытаюсь создать изолированную среду с помощью pip, инструкции из «Практическое машинное обучение с лыжным комплектом и потоком тензоров» заставляют меня запускать эти строки кода, и вот результат, который я получаю. Я попытался удалить pipenv , и это создает еще одну ошибку, при которой команда pipenv не найдена. Не знаю, как это обойти, может кто-нибудь помочь? Я использую Mac с python3.9

Дарренс-MacBook-Air:~ одоннед4$ cd $ML_PATH

Дарренс-MacBook-Air:~ одоннед4$ virtualenv env

   File "/usr/local/bin/virtualenv", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 3241, in <module>
    @_call_aside
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 3225, in _call_aside
    f(*args, **kwargs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 3254, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 585, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 598, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 786, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'platformdirs<3,>=2' distribution was not found and is required by virtualenv```
 

Ответ №1:

В чем проблема?

Вы пытаетесь запустить Python 3.9, верно? Ну, согласно вашему сообщению об ошибке, похоже, что вы вызываете Python 2.7:

 File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 3241, in <module>
                                                           ^^^
 

Эта путаница возникает из-за того, что macOS добавила Python 2.7 в дистрибутив по… соображениям совместимости. И, вероятно, у вас есть virtualenv этот дистрибутив, но у вас его нет platformdirs , поэтому создание virtualenv не удается.

Как решить эту проблему?

Есть много способов прояснить эту путаницу. Хороший способ-использовать python3 -m virtualenv (вместо virtualenv ). Это должно создать virtualenv с Python 3.

Кроме того, вы можете убедиться, что virtualenv пакет доступен в вашей установке Python 3.9. Чтобы определить это, посмотрите virtualenv , появляется ли оно при вводе python3 -m pip list . Если нет, беги python3 -m pip install virtualenv .

Ответ №2:

Попробуйте удалить setuptools с помощью

 pip uninstall -y setuptools 
 

и переустановить его с помощью

 pip install setuptools
 

или

Обновите инструменты настройки с помощью

 pip install --upgrade setuptools
 

или

Что касается меня, то я сталкивался с этой проблемой несколько раньше в python 3.8. Я исправил ее с помощью

 sudo apt install --reinstall python3-pkg-resources python3-setuptools
 

или

Сначала удалите virtualenv и setuptools и найдите папку кэша pip.

 pip cache dir
 

Удалите кэш и установите virtualenv и setuptools.

Я ПРОСТО СКАЗАЛ НЕСКОЛЬКО ШАГОВ … ПОПРОБУЙТЕ ЭТО . МОЖЕТ ПОМОЧЬ : )

Ответ №3:

Реальная проблема здесь в том, что Mac жестко подключен для использования python2 . При использовании virtualenv вы , возможно, выполнили команду:

 $ /usr/bin/easy_install virtualenv
 

который должен был быть добавлен virtualenv в /usr/bin/ для прямого использования, но для использования по умолчанию python2 , вместо python3.9 которого вы могли бы установить самостоятельно.

Простой способ обойти это использовать

 $ python3 -m virtualenv <env-name>
 

вместо

 $ virtualenv <env-name>
 

Или, в моем случае, добавьте псевдоним в .bash_profile :

 $ alias virtualenv="python3 -m virtualenv"
 

это решение для клейкой ленты, но оно также работает.