mypy无法找到模块' dropbox'

时间:2017-07-31 08:39:48

标签: python types dropbox-api mypy dropbox-sdk

我有一个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包进行类型检查?

提前致谢。

版本:

  • Python 3.6 64位(Anaconda)
  • 操作系统:Windows 10 Pro 64位
  • mypy 0.521
  • dropbox SDK 8.0.0

2 个答案:

答案 0 :(得分:1)

我不熟悉Dropbox API,但我得到的印象是,如果用户想要存根,则用户负责运行您找到的文件。

一旦你这样做,你有两个选择,截至撰写时:

  1. 将生成的存根复制到某个文件夹,并将MYPYPATH环境变量设置为指向该文件夹。 (将{(1}} + set site-packages中的存根存储为指向整个MYPYPATH文件夹可能是个坏主意,因为当mypy尝试解析时会收到大量虚假错误消息完全无类型的包。)

    我的建议是对项目中生成的存根进行版本控制,并设置构建过程以在必要时自动设置该环境变量。

  2. 将包含这些存根的拉取请求提交到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