Почему не работает пакет питона pymorphy2?
Установил модуль pymorphy2 в виртуальное окружение, импортировал и вызвал класс из этого модуля, после этого интерпретатор вернул мне ошибку. Всё работало хорошо пока не обновил Python до 3.11
Мой код
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
Ошибка
Traceback (most recent call last):
File "S:\.admin\.Files\.Python\.AiogramBot\main.py", line 3, in <module>
morph = pymorphy2.MorphAnalyzer()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "S:\.admin\.Files\.Python\.AiogramBot\venv\Lib\site-packages\pymorphy2\analyzer.py", line 224, in __init__
self._init_units(units)
File "S:\.admin\.Files\.Python\.AiogramBot\venv\Lib\site-packages\pymorphy2\analyzer.py", line 235, in _init_units
self._units.append((self._bound_unit(unit), False))
^^^^^^^^^^^^^^^^^^^^^^
File "S:\.admin\.Files\.Python\.AiogramBot\venv\Lib\site-packages\pymorphy2\analyzer.py", line 246, in _bound_unit
unit = unit.clone()
^^^^^^^^^^^^
File "S:\.admin\.Files\.Python\.AiogramBot\venv\Lib\site-packages\pymorphy2\units\base.py", line 35, in clone
return self.__class__(**self._get_params())
^^^^^^^^^^^^^^^^^^
File "S:\.admin\.Files\.Python\.AiogramBot\venv\Lib\site-packages\pymorphy2\units\base.py", line 76, in _get_params
(key, getattr(self, key, None)) for key in self._get_param_names()
^^^^^^^^^^^^^^^^^^^^^^^
File "S:\.admin\.Files\.Python\.AiogramBot\venv\Lib\site-packages\pymorphy2\units\base.py", line 70, in _get_param_names
args, varargs, kw, default = inspect.getargspec(cls.__init__)
^^^^^^^^^^^^^^^^^^
AttributeError: module 'inspect' has no attribute 'getargspec'. Did you mean: 'getargs'?
Ответы (3 шт):
Судя по ошибке, функция inspect.getargspec в Python 3.11 уже не доступна. Вместо неё можно использовать функцию inspect.signature.
Примерно так:
import inspect
def foo(a: int, b: str, *, c: float = 1.0) -> bool:
pass
sig = inspect.signature(foo)
print(sig)
# <Signature (a:int, b:str, *, c:float=1.0) -> bool>
Попробуйте обновить модуль pymorphy2 и заменить использование inspect.getargspec на inspect.signature.
Полезные ссылки:
Информация будет обновляться.
Я когда-то немного контрибьютил в pymorphy2, слежу за ситуацией с ним.
Проект pymorphy2 в последнее время (годы) находится в замороженном состоянии (см. issue Проект кажется заброшенным, обновление), крайний коммит в master - от сентября 2020 года, автор долгое время не отвечал на issues и pull-реквесты.
Поддержку Python 3.11 в него не добавлена, хотя есть соответствующий pull-request (в данный момент он закрыт, но в принципе он есть).
Сейчас можно воспользоваться форком pymorphy2 - pymorphy3, поддержку Python 3.11 в него уже влили.
pip install pymorphy3
Установка словарей, если они вдруг не установились вместе с pymorphy3 (словари от pymorphy2 не подойдут, там есть разница в формате самих словарей):
pip install pymorphy3-dicts-ru
Недавно автор pymorphy2 все-таки откликнулся, проект перенесли в отдельную организацию. Планируется, что он будет поддерживаться несколькими меинтейнерами (а не одним человеком, от которого все зависит, как было до этого).
Можно внести правки в библиотеку самостоятельно, взяв их из pull-request.
Там нужно исправить в двух местах единственный файл - pymorphy2/units/base.py
Лично мне это помогло убрать ошибку и библиотека pymorphy2 заработала на Python 3.11