mypy не может найти модуль dropbox
У меня есть небольшая база кода для резервного копирования файлов Dropbox Business, и я пытаюсь использовать mypy, чтобы помочь мне использовать довольно незаметный Dropbox Python SDK.
Я установил mypy, и он работает.
Однако mypy выдает предупреждение для следующей строки:
import dropbox
Предупреждение: "Не удается найти модуль с именем dropbox".
Кажется, что SDK-генератор Dropbox, называемый Stone, должен генерировать совместимые файлы-заглушки (которые в этом случае будут называться dropbox.pyi
).
Но нет dropbox.pyi
в site-packages/dropbox
где mypy будет искать его.
Как я могу получить проверку типа для dropbox
пакет работает?
Заранее спасибо.
Версии:
- Python 3.6 64-bit (Анаконда)
- ОС: Windows 10 Pro 64-битная
- Mypy 0,521
- Dropbox SDK 8.0.0
2 ответа
Dropbox Python SDK не включает в себя файлы.pyi как часть Dropbox Python SDK, поэтому вам нужно их собрать и установить MYPYPATH
,
Для этого из спецификации Dropbox API:
# We first need the Dropbox stone and public stone specs:
git clone git@github.com:dropbox/stone.git
git clone git@github.com:dropbox/dropbox-api-spec.git
# Next we need to install ply (used for running stone)
pip install ply
# Use stone to build the type stubs
PYTHONPATH=stone python -m stone.cli python_type_stubs mypy_stubs/dropbox dropbox-api-spec/*.stone
# include __init__.py files
touch mypy_stubs/__init__.py mypy_stubs/dropbox/__init__.py
# now mypy succeeds when using MYPYPATH to reference new .pyi files
MYPYPATH=mypy_stubs mypy project.py
Кроме того, вы можете собрать заглушки из SDK Dropbox Python:
# This assumes the following python modules are already installed: six, ply
git clone git@github.com:dropbox/dropbox-sdk-python.git
cd dropbox-sdk-python/
git submodule init
git submodule update
PYTHONPATH=./stone python -m stone.cli python_type_stubs mypy_stubs/dropbox spec/*.stone
Я не знаком с API Dropbox, но у меня сложилось впечатление, что пользователь отвечает за запуск найденного вами файла, если ему нужны заглушки.
Как только вы это сделаете, у вас есть два варианта на момент написания:
Скопируйте созданные вами заглушки в какую-то папку и установите
MYPYPATH
переменная окружения, указывающая на эту папку. (Вероятно, было бы плохой идеей хранить заглушки вsite-packages
+ наборMYPYPATH
указать на весь вашsite-packages
папку, так как вы получите много ложных сообщений об ошибках, когда mypy попытается проанализировать пакеты, которые полностью не напечатаны.)Я рекомендую контролировать версии сгенерированных заглушек в вашем проекте и настроить процесс сборки так, чтобы при необходимости автоматически устанавливать эту переменную среды.
Отправьте запрос на извлечение, содержащий эти заглушки, в typhed, хранилище заглушек типов, используемое различными программами проверки типов, включая mypy. Сначала вам нужно получить разрешение от разработчиков API Dropbox на включение заглушек.
(Я подозреваю, что они, вероятно, скажут "да", если API еще не находится в состоянии альфа / бета и не подвержен изменениям).