Используйте Mypy с Ruamel.yaml
Я пытаюсь использовать MyPy с модулями, которые используют ruamel.yaml, и Mypy не может найти ruamel.yaml, даже несмотря на то, что у Python нет проблем с его поиском. Я озадачен, потому что не могу найти модуль с именем YAML.py или класс с именем YAML, даже если эти операторы работают в Python:
from ruamel.yaml import YAML
yaml = YAML()
x = yaml.load()
Что мне нужно сделать, чтобы MyPy распознал ruamel.yaml?
3 ответа
Обходной путь - запустить без инкрементной логики mypy:
python -m mypy --no-incremental myfile.py
Фон
В mypy есть известная проблема, см . здесь.
В итоге:
Что-то не работает с инкрементальной логикой mypy, когда она сталкивается
ruamel
.
Когда вы запускаете его один раз, все идет нормально. Это команда:
python -m mypy myfile.py
Затем, когда вы запускаете его снова, вы получаете ошибку:
error: Skipping analyzing 'ruamel': found module but no type hints or library stubs [import]
Потом при повторном запуске все нормально
и т.п.
Вы не должны искать файл YAML.py
, YAML
в
yaml = YAML()
это класс, который определен в ruamel/yaml/main.py
и это импортируется в ruamel/yaml/__init__.py
(оба под сайтом-пакеты). Вот почему вы делаете:
from ruamel.yaml import YAML
(альтернативой будет то, что есть файл yaml.py
под каталогом ruamel
, но загрузчик / дампер слишком много для одного файла).
Что может сработать, если приведенные выше знания не помогут вам разобраться, если явно установить глобальный флаг mypy_path или переменную среды MYPYPATH
, Это должно включать каталог, в котором каталог ruamel
расположен.
(Я не смог найти упомянутое в документации, но из источника (mypy/build.py:mypy_path()
) вы можете видеть, что это должна быть строка, которая разбивается на os.pathsep
(который является двоеточием (:
) в моей системе на базе Linux))
У меня такая же проблема.
Даже после установки MYPYPATH=./. Venv/lib/python3.7/site-packages
Временное "решение" игнорирует отсутствующее исключение импорта
mypy --ignore-missing-import