Вопрос или проблема
Я пытаюсь установить библиотеки 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.
Причины возникновения проблемы
- Удаление distutils: Python 3.12 исключил
distutils
, поэтому некоторые пакеты, которые все еще используютdistutils
, могут не устанавливаться должным образом. - Устаревшие зависимости: Пакеты, такие как
preshed
, могут ссылаться на устаревшие зависимости, ожидая, чтоmsvccompiler
будет доступен. - Версия pip и setuptools: Если у вас старая версия pip или setuptools, это также может приводить к проблемам при установке.
Рекомендуемые шаги по устранению ошибки
-
Обновите pip и setuptools:
Убедитесь, что у вас установлены последние версии pip и setuptools, так как они может исправить совместимость с Python 3.12. Вы можете обновить их с помощью следующей команды:pip install --upgrade pip setuptools
-
Используйте более старую версию Python:
Если обновление pip и setuptools не решает проблему, рассмотрите возможность использования Python 3.11 или более ранней версии, которая все еще поддерживаетdistutils
. Это можно сделать с помощью менеджеров версий, таких какpyenv
. -
Замена конфликтующих библиотек:
Проверьте, существуют ли альтернативы библиотекам, которые испытывают проблемы с совместимостью. Обратите внимание на любые форки или активные проекты на GitHub, которые могут иметь исправления для поддержки Python 3.12. -
Установка библиотек без неудачных зависимостей:
Если зависимость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 проектах!