2017-07-31 202 views
2

我有一個small codebase to back up Dropbox Business files,並試圖使用mypy來幫助我使用寧靜的Dropbox Python SDKmypy找不到模塊'dropbox'

我已經安裝了mypy,它正在工作。

然而,mypy提出了警告以下行:

import dropbox 

的警告是「無法找到名爲‘Dropbox的’模塊」。

似乎Dropbox的SDK生成器,名爲Stone,應該是generate compatible stub files(在這種情況下,它將被稱爲dropbox.pyi)。

但是沒有dropbox.pyisite-packages/dropbox,mypy會尋找它。

如何獲得dropbox包的工作類型檢查?

在此先感謝。

版本:

  • 的Python 3.6 64位(Anaconda)的
  • 操作系統:Windows 10臨64位
  • mypy 0.521
  • 保管箱SDK 8.0.0

回答

0

Dropbox的Python的SDK不包括.pyi文件,Dropbox的的Python SDK的一部分,所以你必須構建它們,並設置MYPYPATH

爲了從Dropbox的API SPEC這樣做:

# We first need the Dropbox stone and public stone specs: 
git clone [email protected]:dropbox/stone.git 
git clone [email protected]: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 [email protected]: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 
+0

的SDK API已經有一段時間相同的,所以似乎是穩定的。 Dropbox中的某人有沒有任何理由不將這些存根添加到分類回購中?如果這是一個麻煩的問題,我應該添加存根嗎? – blokeley

+1

我不知道是否有什麼特別的原因,但我會要求球隊這樣做。 – Greg

+0

非常感謝。如果您聽到存根被添加到密碼中,請在上面的答案中註明 – blokeley

1

我不熟悉Dropbox API,但是我得到的印象是,如果用戶需要存根,用戶需要負責運行您找到的那個文件。

一旦你這樣做,你有兩個選擇,作爲寫作的時間:

  1. 複製你產生一些文件夾中的存根和設置MYPYPATH環境變量指向該文件夾。 (這可能是一個壞主意存根存儲在site-packages +設置MYPYPATH指向整個site-packages文件夾,因爲你會得到大量的虛假錯誤信息時mypy試圖分析是完全無類型的包。)

    我建議使用版本控制項目中生成的存根,並設置構建過程以根據需要自動設置該環境變量。

  2. 將包含這些存根的請求提交到typeshed,這是各種類型檢查程序使用的類型存根庫(包括mypy)的存儲庫。您首先需要獲得Dropbox API開發人員的許可才能包含存根。 (我猜他們可能會說是,除非API仍處於alpha/beta狀態並且容易發生變化)。