4

我有一个小的代码库来备份 Dropbox Business 文件,并且正在尝试使用mypy来帮助我使用相当 unpythonic 的Dropbox Python SDK

我已经安装了 mypy,它正在工作。

但是,mypy 会针对以下行发出警告:

import dropbox

警告是“找不到名为‘dropbox’的模块”。

似乎 Dropbox 的 SDK 生成器,称为 Stone,应该生成兼容的存根文件(在这种情况下将被称为dropbox.pyi)。

但是没有dropbox.pyiin site-packages/dropbox,mypy 会在其中寻找它。

如何对dropbox包进行类型检查?

提前致谢。

版本:

  • Python 3.6 64 位 (Anaconda)
  • 操作系统:Windows 10 专业版 64 位
  • 我的 0.521
  • 保管箱 SDK 8.0.0
4

2 回答 2

1

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

完成此操作后,截至撰写本文时,您有两种选择:

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

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

  2. 向typeshed提交包含这些存根的拉取请求, typeshed是各种类型检查器(包括 mypy)使用的类型存根的存储库。您首先需要获得 Dropbox API 开发人员的许可才能包含存根。

    (我怀疑他们可能会说是,除非 API 仍处于 alpha/beta 状态并且易于更改)。

于 2017-08-01T15:14:07.287 回答
1

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
于 2017-08-02T16:32:37.093 回答