Ошибка pip pipg_resources.DistributionNotFound

Я пытаюсь установить новый модуль, но обнаружил, что pip не работает - это показывает

pkg_resources.DistributionNotFound: The 'pip==1.5.6' distribution was not found and is required by the application

за каждый звонок я выполнил. Также для pip --help, Я нашел несколько советов, чтобы переустановить pip с помощью pip или же easy_install, но easy_install тоже не работает:

pkg_resources.DistributionNotFound: The 'setuptools==5.7' distribution was not found and is required by the application

Есть ли способ исправить эту проблему без переустановки python и все его модули?
У меня Linux Ubuntu 14.04.
apt-get install python-pip предлагает установить pip (и куча другого следующего программного обеспечения), как будто у меня его нет в моей системе. Я боюсь это сделать, будет ли здесь конфликт?

Upd.
apt-get говорит, что хочет установить следующее: build-essential dpkg-dev fakeroot g++ g++-4.8 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libfakeroot libstdc++-4.8-dev python-chardet-whl python-colorama python-colorama-whl python-distlib python-distlib-whl python-html5lib python-html5lib-whl python-pip python-pip-whl python-requests-whl python-setuptools python-setuptools-whl python-six-whl python-urllib3-whl python-wheel, Но, как я знаю, пип работал у меня без этих пакетов.
Также я выполнил
which -a python: /usr/bin/python
which -a pip: /usr/local/bin/pip
python --version: Python 2.7.6

0 ответов

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

Например, на моем Ubuntu 20.04.1 LTS я установил Python 3.6 из исходников в дополнение к Python 3.8, распространяемому с Ubuntu 20. Это то, что я получаю с pip3 --version после установки Python 3.6:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 581, in _build_master
    ws.require(__requires__)
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 898, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 789, in resolve
    raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.VersionConflict: (pip 20.2.3 (/usr/local/lib/python3.6/site-packages), Requirement.parse('pip==20.0.2'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/pip3", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3126, in <module>
    @_call_aside
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3110, in _call_aside
    f(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3139, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 583, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 596, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 784, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'pip==20.0.2' distribution was not found and is required by the application

Последняя строка - это ошибка, о которой идет речь, но обратите внимание на важную деталь в трассировке: raise VersionConflict.

Это можно решить, явно используя требуемую версию pip:

$ python3.6 -m pip --version
pip 20.2.3 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

Или просто:

$ pip3.6 --version
pip 20.2.3 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

Еще одна проблема, на которую можно наткнуться, - это проблема с отсутствующим lsb_release при выполнении pip3.6 install:

  File "/usr/local/lib/python3.6/subprocess.py", line 438, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.

Это можно решить, указав lsb_release.py и создание символической ссылки, например:

sudo ln -s /usr/lib/python3/dist-packages/lsb_release.py /usr/local/lib/python3.6/site-packages/lsb_release.py

Теперь можно обновить pip3.6 и установить новые пакеты:

$ pip3.6 install --upgrade pip
$ pip3.6 install mypy

Обратите внимание, что для исходного Python в моем дистрибутиве я просто использую pip3не pip3.8. Но для того, чтобы это сработало, мне нужно сначала переключить текущий питон на 3.8. Например, я бы сделал sudo update-alternatives --config pythonи выберите 3.8. Другие могут использовать другие методы для управления версиями Python.

Остерегайтесь изменения системного Python по умолчанию, это может вызвать проблемы, в том числе такие симптомы, как "терминал не открывается". Хорошо иметь доступный резервный терминал, например, в Visual Studio Code.

Другие вопросы по тегам