2017-07-31 2 views
2

J'ai un small codebase to back up Dropbox Business files, et j'essaie d'utiliser mypy pour m'aider à utiliser le plutôt nonpythique Dropbox Python SDK.mypy ne peut pas trouver le module 'dropbox'

J'ai installé mypy, et cela fonctionne.

Cependant, mypy soulève un avertissement pour la ligne suivante:

import dropbox 

L'avertissement est "Vous ne trouvez pas le module nommé 'dropbox'".

Il semble que le générateur de SDK de Dropbox, appelé Stone, devrait generate compatible stub files (qui dans ce cas serait appelé dropbox.pyi).

Mais il n'y a pas dropbox.pyi dans site-packages/dropbox, où mypy le chercherait.

Comment puis-je vérifier le type du package dropbox?

Merci d'avance.

Versions:

  • python 3.6 64 bits (Anaconda)
  • OS: Windows 10 Pro 64 bits
  • mypy 0,521
  • la sélection SDK 8.0.0

Répondre

0

Le Dropbox SDK Python ne comprend pas les fichiers .pyi dans le cadre du Dropbox SDK Python, de sorte que vous auriez à les construire et mettre MYPYPATH.

Pour ce faire de la spécification API Dropbox:

# 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 

Alternativement, vous pouvez construire les talons du Dropbox SDK Python:

# 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

L'API SDK a été le même pour un certain temps afin semble être stable. Y a-t-il une raison pour laquelle quelqu'un chez Dropbox n'ajoute pas les stubs au repo mis en page? Si c'est un problème, dois-je ajouter les talons? – blokeley

+1

Je ne sais pas s'il y a une raison particulière, mais je vais demander à l'équipe de le faire. – Greg

+0

Excellent merci. Si vous entendez dire que les talons ont été ajoutés au typehed, s'il vous plaît faites une note sur votre réponse ci-dessus – blokeley

1

Je ne suis pas familier avec l'API Dropbox, mais l'impression que je reçois est que l'utilisateur est responsable de l'exécution de ce fichier que vous avez trouvé s'il veut des stubs.

Une fois que vous le faites, vous avez deux options, du moment de la rédaction:

  1. Copiez les talons que vous avez généré quelque dossier et définir la variable d'environnement MYPYPATH pour pointer vers ce dossier. (Il serait probablement une mauvaise idée de stocker les talons dans site-packages + set MYPYPATH au point quand mypy tente d'analyser les paquets qui sont complètement typées l'ensemble de votre dossier site-packages puisque vous obtiendrez beaucoup de faux messages d'erreur.)

    Mon La recommandation consiste à contrôler les versions des stubs générés dans votre projet et à configurer votre processus de génération pour définir automatiquement cette variable d'environnement si nécessaire.

  2. Soumettre une demande d'extraction contenant ces stubs à typeshed, le référentiel de stubs de type utilisé par divers vérificateurs de type, y compris mypy. Vous devez d'abord obtenir l'autorisation des développeurs de l'API Dropbox pour inclure les stubs.

    (Je suspecte qu'ils diront probablement oui, à moins que l'API soit toujours dans l'état alpha/bêta et est susceptible de changer).