ImportError: нет модуля с именем typing

Я пытаюсь создать python2 virtualenv, поэтому я пытаюсь pip install virtualenv и получаю

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 11, in <module>
    load_entry_point('pip==21.1.1', 'console_scripts', 'pip')()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2843, in load_entry_point
    return ep.load()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2434, in load
    return self.resolve()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2440, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Library/Python/2.7/site-packages/pip-21.1.1-py2.7.egg/pip/__init__.py", line 1, in <module>
    from typing import List, Optional
ImportError: No module named typing

Я получаю почти идентичную ошибку с pip install typing

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 11, in <module>
    load_entry_point('pip==21.1.1', 'console_scripts', 'pip')()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2843, in load_entry_point
    return ep.load()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2434, in load
    return self.resolve()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 2440, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/Library/Python/2.7/site-packages/pip-21.1.1-py2.7.egg/pip/__init__.py", line 1, in <module>
    from typing import List, Optional
ImportError: No module named typing

Многие решения предлагают использовать python3, но я специально пытаюсь создать виртуальную среду python 2


Я использую MacOS Big Sur на Intel i3 Mac Mini 2018 г.


person Sam    schedule 23.05.2021    source источник
comment
Я не знаю, кто проголосовал против всех трех ответов, но, скорее всего, это удержит людей от того, чтобы оставить больше ответов, если они увидят, что все ответы отклонены.   -  person Sam    schedule 23.05.2021
comment
Все ответы на тот момент были сосредоточены не на том, а не на решении вашей проблемы.   -  person deceze♦    schedule 23.05.2021
comment
Вам нужно понизить версию pip для вашего Python. См. stackoverflow.com/a/65871131/7976758. У вас другая проблема, но процесс перехода на более раннюю версию и URL-адреса одинаковы.   -  person phd    schedule 23.05.2021


Ответы (5)


Python 2 подошел к концу. Следовательно, поддержка Python 2 была удалена из pip в версии 21. Вам необходимо понизить pip до версии 20.


Я пробовал это (в командной строке оболочки):

# downgrade pip to 20.3.4
pip install --user pip==20.3.4
# better: 'pip<21', but it must be quoted!

# install virtualenv if not installed already
pip install --user virtualenv

# create a new venv for old python
virtualenv -p /usr/bin/python2.7 /tmp/venv27

# update pip back to the recent version
pip install --user --upgrade pip

Теперь pip --version показывает версию 21, но внутри активированной среды есть версия 20:

sh-5.0$ pip --version
pip 21.1.1 from /home/vpfb/.local/lib/python3.9/site-packages/pip (python 3.9)

sh-5.0$ pwd
/tmp/venv27/bin

sh-5.0$ source ./activate

(venv27) sh-5.0$ pip --version
pip 20.3.4 from /tmp/venv27/lib/python2.7/site-packages/pip (python 2.7)

Я попытался установить случайный пакет в venv, и это удалось.

person VPfB    schedule 23.05.2021
comment
Как бы вы посоветовали это сделать - person Sam; 23.05.2021
comment
с аргументом pip==20.3.4 (последний пункт 20.XY), как показано здесь: stackoverflow.com/questions/5226311/ - person VPfB; 23.05.2021
comment
Есть ли способ сделать все это в виртуальной среде? - person Sam; 23.05.2021
comment
Когда я пытаюсь pip install pip==20.3.4, я получаю ту же ошибку при наборе текста - person Sam; 23.05.2021
comment
@Sam Поскольку ваш пакет уже «поврежден», вы не можете использовать его для установки другой версии. Вам нужно будет установить его с нуля другим способом. Обратитесь к документации по поводу наиболее подходящего метода для вашей системы. - person deceze♦; 23.05.2021
comment
Итак, после удаления пипса внутри /usr/local/bin/pip я запустил sudo easy_install pip==20.3.4, после этого я смог установить virtualenv. Когда я попытался использовать pip install --user pip==20.3.4, у меня возникла та же ошибка без модуля с именем typing error. Не могли бы вы включить эту информацию в свой ответ? - person Sam; 23.05.2021
comment
@Sam Я думаю, у вас может быть установлено несколько пунктов. Используйте полный путь, например /usr/local/bin/pip и перед установкой убедитесь с помощью --version, что вы используете нужную версию. - person VPfB; 23.05.2021
comment
Я думаю, что у меня просто есть pip и pip3, я получил этот компьютер несколько недель назад - person Sam; 23.05.2021
comment
@Sam, может быть, есть и другие проблемы. Пожалуйста, обновите свой вопрос более подробной информацией, чтобы сделать его воспроизводимым шаг за шагом: какие команды вы запускали (с информацией о версии) для настройки вашей среды и какая команда не удалась. - person VPfB; 23.05.2021

Боюсь, вам придется использовать другую версию. Я знаю, что вы много слышали об этом, но Python 2.7 больше не поддерживается (с 1 января 2021 года), поэтому он может показывать ошибку.

person shreyas    schedule 23.05.2021
comment
Что именно значит не поддерживается? Я пытаюсь запустить старый проект Github, ничего не меняя. Python2 может не поддерживаться, но возможно ли это? - person Sam; 23.05.2021
comment
Я не думаю, что это сработает больше. Не поддерживается, значит, он больше не работает. - person shreyas; 23.05.2021
comment
@shreyas Это вовсе не значит. Существующее программное обеспечение будет работать нормально, как всегда. В нем нет выключателя. Это просто означает, что никаких дальнейших обновлений выпускать не будет, и не надо-приходить-плакать-к-нам-если-что-то-не работает. - person deceze♦; 23.05.2021

typing - это

Новое в версии 3.5.

Поэтому неудивительно, что import typing вызвал сбой в python2.7. Итак, если вы обнаружите, что проект, использующий import typing, предназначен либо для python не ниже 3.5, либо использует typing, отличный от встроенного модуля. Если вы знаете, что хотите получить ответвления от конца жизни python2, прочтите Закат Python 2 . Если у вас устаревшая версия python2, вы можете попробовать портировать на python3.

person Daweo    schedule 23.05.2021
comment
Есть ли какой-нибудь инструмент, который упрощает преобразование кода python2 в python3 - person Sam; 23.05.2021
comment
@Sam Вам не нужно конвертировать проект в Python 3 только для того, чтобы его запустить. В зависимости от сложности проекта, это может занять несколько месяцев. - person deceze♦; 23.05.2021
comment
@Sam взгляните на 2to3 - person Daweo; 23.05.2021

Модуль ввода действителен только для Python версии 3.5 и выше.

https://pypi.org/project/typing/

person Izzat Zainol    schedule 23.05.2021

pip прекратил поддержку Python 2 в версии 21. Вам потребуется установить старую версию pip для Python 2.

person deceze♦    schedule 23.05.2021