ImportError: невозможно импортировать имя ‘msvccompiler’ из ‘distutils’

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

Я пытаюсь установить библиотеки neuralcoref и allennlp с помощью pip в своей виртуальной среде с Python 3.12.3. Я использую Visual Studio Code в качестве редактора. Постоянно возникает какая-то ошибка зависимости. Особенно та, что приведена ниже. В данный момент любой удобный код для выполнения разрешения коореференции будет полезен, вместо того чтобы исправлять саму ошибку.

ошибка: subprocess-exited-with-error

  × Подпроцесс pip для установки зависимостей сборки не был выполнен успешно.
  │ код выхода: 1
  ╰─> [33 строки вывода]
      Сборка setuptools
        Используется закэшированный setuptools-75.3.0-py3-none-any.whl.metadata (6.9 kB)
      Сборка wheel<0.33.0,>0.32.0
        Используется закэшированный wheel-0.32.3-py2.py3-none-any.whl.metadata (2.1 kB)
      Сборка Cython
        Используется закэшированный Cython-3.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.2 kB)
      Сборка cymem<2.1.0,>=2.0.2
        Используется закэшированный cymem-2.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (8.4 kB)
      Сборка preshed<2.1.0,>=2.0.1
        Используется закэшированный preshed-2.0.1.tar.gz (113 kB)
        Подготовка метаданных (setup.py): начата
        Подготовка метаданных (setup.py): завершена со статусом 'ошибка'
        ошибка: subprocess-exited-with-error

        × python setup.py egg_info не был выполнен успешно.
        │ код выхода: 1
        ╰─> [6 строк вывода]
            Traceback (most recent call last):
              Файл "<строка>", строка 2, в <module>
              Файл "<pip-setuptools-caller>", строка 34, в <module>
              Файл "/tmp/pip-install-p0_beefn/preshed_85a75e93cab645b097eb3e93e834b6d5/setup.py", строка 9, в <module>
                from distutils import ccompiler, msvccompiler
            ImportError: не удается импортировать имя 'msvccompiler' из 'distutils' (/home/sanjiv/Documents/git_stuff/LeuphanaStuff/MasterThesis/.venv3.12/lib/python3.12/site-packages/setuptools/_distutils/__init__.py). Вы имели в виду: 'ccompiler'?
            [конец вывода]

        примечание: Эта ошибка исходит от подпроцесса и, вероятно, не является проблемой с pip.
      ошибка: ошибка генерации метаданных

      × Ошибка при генерации метаданных пакета.
      ╰─> См. выше для вывода.

      примечание: Это проблема с вышеупомянутым пакетом, а не с pip.
      подсказка: См. выше для получения деталей.
      [конец вывода]

  примечание: Эта ошибка исходит от подпроцесса и, вероятно, не является проблемой с pip.
ошибка: subprocess-exited-with-error

× Подпроцесс pip для установки зависимостей сборки не был выполнен успешно.
│ код выхода: 1
╰─> См. выше для вывода.

примечание: Эта ошибка исходит от подпроцесса и, вероятно, не является проблемой с pip.

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

Устранение ошибки ImportError: невозможно импортировать имя ‘msvccompiler’ из ‘distutils’

Ошибка, с которой вы столкнулись при попытке установить библиотеки neuralcoref и allennlp, указывает на проблему с импортом msvccompiler из модуля distutils. Это связано с тем, что начиная с Python 3.12, модуль distutils был официально удален из стандартной библиотеки Python, что может приводить к проблемам с совместимостью для некоторых пакетов, которые еще не были обновлены для работы с новыми версиями Python.

Причины возникновения проблемы

  1. Удаление distutils: Python 3.12 исключил distutils, поэтому некоторые пакеты, которые все еще используют distutils, могут не устанавливаться должным образом.
  2. Устаревшие зависимости: Пакеты, такие как preshed, могут ссылаться на устаревшие зависимости, ожидая, что msvccompiler будет доступен.
  3. Версия pip и setuptools: Если у вас старая версия pip или setuptools, это также может приводить к проблемам при установке.

Рекомендуемые шаги по устранению ошибки

  1. Обновите pip и setuptools:
    Убедитесь, что у вас установлены последние версии pip и setuptools, так как они может исправить совместимость с Python 3.12. Вы можете обновить их с помощью следующей команды:

    pip install --upgrade pip setuptools
  2. Используйте более старую версию Python:
    Если обновление pip и setuptools не решает проблему, рассмотрите возможность использования Python 3.11 или более ранней версии, которая все еще поддерживает distutils. Это можно сделать с помощью менеджеров версий, таких как pyenv.

  3. Замена конфликтующих библиотек:
    Проверьте, существуют ли альтернативы библиотекам, которые испытывают проблемы с совместимостью. Обратите внимание на любые форки или активные проекты на GitHub, которые могут иметь исправления для поддержки Python 3.12.

  4. Установка библиотек без неудачных зависимостей:
    Если зависимость preshed вызывает проблемы, то можно попробовать установить остальные библиотеки, избегая установки данной зависимости. Иногда сделать это можно с помощью команды:

    pip install allennlp --no-deps

Альтернативные решения для работы с прямой коррекцией ссылок

Если вы ищете подходящие решения для выполнения задачи разметки coreference без использования neuralcoref и allennlp, рассмотрите следующие библиотеки, которые могут быть полезны:

  • spaCy: Популярная NLP библиотека, обладающая поддержкой coreference resolution через интерфейс Transforms. Установите ее с помощью:
    pip install spacy
  • Stanza: Библиотека от Stanford NLP, отличающаяся хорошими результатами в задачах обработки естественного языка.
    pip install stanza

Заключение

Проблема, с которой вы столкнулись, является следствием изменений в Python 3.12, и, как таковая, требует адаптации используемых вами библиотек и подходов. Следуя предложенным рекомендациям, вы сможете решить текущие проблемы с установкой и найти подходящие альтернативы для выполнения coreference resolution. Удачи в ваших NLP проектах!

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

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