Рейтинг:0

ImportError: нет модуля с именем «pip._vendor.packaging»

флаг in

Мне нужно запустить некоторое программное обеспечение на Python 3.5

Я использую Ubuntu 21.10.

Я получаю эту ошибку:

(foobar_addressbook) guettli@p15:~/foobar/projects/foobar_addressbook$ tox -e py35-django18 


py35-django18 создать: /home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18
ОШИБКА: вызов не выполнен (код выхода 1), файл журнала: /home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/log/py35-django18-1.log
================================================== ================== начало журнала ============================== ========================================
Traceback (последний последний вызов):
  Файл "/usr/local/lib/python3.5/runpy.py", строка 193, в _run_module_as_main
    "__main__", mod_spec)
  Файл "/usr/local/lib/python3.5/runpy.py", строка 85, в _run_code
    exec(код, run_globals)
  Файл "/home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/lib/python3.5/site-packages/pip/__main__.py", строка 23, в <module>
    из pip._internal.cli.main импортировать main как _main # isort:skip # noqa
  Файл "/home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/lib/python3.5/site-packages/pip/_internal/cli/main.py", строка 10, в <module>
    из pip._internal.cli.autocompletion импортировать автозаполнение
  Файл "/home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/lib/python3.5/site-packages/pip/_internal/cli/autocompletion.py", строка 9, в <module>
    из pip._internal.cli.main_parser импортировать create_main_parser
  Файл "/home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/lib/python3.5/site-packages/pip/_internal/cli/main_parser.py", строка 7, в <module>
    из pip._internal.cli импортировать cmdoptions
  Файл "/home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/lib/python3.5/site-packages/pip/_internal/cli/cmdoptions.py", строка 23, в <module>
    из pip._vendor.packaging.utils импортировать canonicalize_name
ImportError: нет модуля с именем «pip._vendor.packaging»

================================================== =================== конец журнала ============================= =========================================
_____________________________________________________________________ резюме ______________________________________________________________________
ОШИБКА: py35-django18: InvocationError для команды /home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/bin/python -m pip freeze (выход с кодом 1)

Любая идея, как я могу исправить эту ошибку?

Связанный вопрос: Ошибка сегментации при установке Python 3.5: surepip

Рейтинг:0
флаг in

Шаг 1

pip в virtualenv кажется сломанным, поэтому загрузите pip:

завиток https://bootstrap.pypa.io/pip/3.5/get-pip.py | .tox/py35-django18/bin/python - 

Шаг 2

Теперь я получаю эту ошибку

    ОШИБКА: Команда завершилась ошибкой со статусом выхода 1:
     команда: /home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xsbc7r69/django-celery_63fa83d5391f499a9cc375c1c1fed8b6/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xsbc7r69/django-celery_63fa83d5391f499a9cc375c1c1fed8b6/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)( __file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec( скомпилировать (код, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-6esk_zf9
         cwd: /tmp/pip-install-xsbc7r69/django-celery_63fa83d5391f499a9cc375c1c1fed8b6/
    Полный вывод (7 строк):
    Traceback (последний последний вызов):
      Файл "<string>", строка 1, в <module>
      Файл "/home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/lib/python3.5/site-packages/setuptools/__init__.py", строка 18, в <module>
        импортировать setuptools.версия
      Файл "/home/guettli/foobar/projects/foobar_addressbook/.tox/py35-django18/lib/python3.5/site-packages/setuptools/version.py", строка 1, в <module>
        импортировать pkg_resources
    ImportError: Нет модуля с именем «pkg_resources»

Чтобы исправить это:

.tox/py35-django18/bin/python -m pip install -U setuptools

Теперь виртуалка tox работает.

Если вы знаете более простой способ заставить Python3.5 работать в Ubuntu 21.10, оставьте комментарий. Спасибо.

флаг ru
Способ заставить старый Python работать на Ubuntu 21.10 — использовать PyENV для его настройки или убедиться, что вы установили PIP вместе с компиляцией Python (не по умолчанию!) — это также делает инструменты настройки и другие вещи доступными в вашей среде по умолчанию.
guettli avatar
флаг in
@ThomasWard Сначала я попробовал pyenv, но это не удалось из-за ошибки seg. См. https://askubuntu.com/questions/1376525/segmentation-fault-while-installing-python-3-5-ensurepip.
флаг ru
Могу я спросить, зачем вам *нужен* Python 3.5, которому уже много лет? Обновление вашего приложения для более нового python по какой-то причине невозможно?
guettli avatar
флаг in
@ThomasWard Python3.5 — это промежуточный шаг для перехода с 2,7 на 3,8.(В настоящее время это приложение django использует Django 1.4).
флаг ru
Как человеку, которому пришлось перейти от старого Django к последнему, ваш «промежуточный» шаг, скорее всего, доставит вам больше горя, чем полное переписывание. Потому что тогда вам придется снова переписывать, чтобы получить еще более новый Django, совместимый с py3.8.
guettli avatar
флаг in
@ThomasWard Я не хочу использовать PyENV. Он делает волшебные вещи, которые я не хочу делать. Например, он меняет PATH, и его нужно включить через .profile. Все, что мне нужно, это `/usr/local/bin/python3.5`. Мне не нужен инструмент для переключения между версиями Python.

Ответить или комментировать

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