我有一个small codebase to back up Dropbox Business files,我正在尝试使用mypy来帮助我使用相当无声的Dropbox Python SDK。
我已经安装了mypy,它正在运行。
但是,mypy会针对以下行提出警告:
import dropbox
警告是"找不到名为' dropbox'""。
的模块似乎Dropbox的SDK生成器(称为Stone)应generate compatible stub files(在本例中称为dropbox.pyi
)。
但dropbox.pyi
中没有site-packages/dropbox
,其中mypy会查找它。
如何对dropbox
包进行类型检查?
提前致谢。
版本:
答案 0 :(得分:1)
我不熟悉Dropbox API,但我得到的印象是,如果用户想要存根,则用户负责运行您找到的文件。
一旦你这样做,你有两个选择,截至撰写时:
将生成的存根复制到某个文件夹,并将MYPYPATH
环境变量设置为指向该文件夹。 (将{(1}} + set site-packages
中的存根存储为指向整个MYPYPATH
文件夹可能是个坏主意,因为当mypy尝试解析时会收到大量虚假错误消息完全无类型的包。)
我的建议是对项目中生成的存根进行版本控制,并设置构建过程以在必要时自动设置该环境变量。
将包含这些存根的拉取请求提交到typeshed,这是各种类型检查器使用的类型存根的存储库,包括mypy。您首先需要获得Dropbox API开发人员的许可才能包含存根。
(我怀疑他们可能会说是,除非API仍然处于alpha / beta状态并且很容易发生变化)。
答案 1 :(得分:0)
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
或者,您可以从Dropbox Python SDK构建存根:
# 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