web-dev-qa-db-fra.com

Créer des fichiers .pyi automatiquement?

Comment puis-je créer automatiquement le code passe-partout des fichiers pyi ?

Je veux créer un fichier pyi pour l'indication de type comme décrit dans pep484 qui contient tous les noms de méthode.

Je ne veux pas de magie. Je souhaite ajouter les informations de type après la création automatique du fichier.

Je veux éviter le travail de copier-coller.

Objectif: saisir des indications dans PyCharm pour Python2.

19
guettli

En ce qui me concerne, il n'y a pas un tel outil direct dans PyCharm. Il existe cependant des outils tiers pour cela.


.pyi générateurs

MyPy

Oui, je suppose que quiconque souhaite utiliser la vérification de type à la compilation en Python finit probablement par utiliser MyPy. MyPy contient stubgen.py outil qui génère .pyi des dossiers.

Usage

mkdir out
stubgen urllib.parse

génère out/urllib/parse.pyi.

Vous pouvez également l'utiliser avec Python2:

stubgen --py2 textwrap

Et pour les modules C:

scripts/stubgen --docpath <DIR>/Python-3.4.2/Doc/library curses

Si vous souhaitez spécifier le chemin d'accès à votre package personnalisé, vous pouvez utiliser --search-path option:

stubgen my-pkg --search-path=folder/path/to/the/package

fichiers make-stub

Ce projet est dédié précisément à cet objectif.

Usage

Un très basique (mais il a une poignée d'options, il suffit de consulter README.md ou make_stub_files -h

make_stub_files foo.py

pré-écrit .pyi des dossiers

Vous n'avez donc pas à écrire le vôtre.

Typeded

Oui, si vous utilisez .pyi fichiers dans votre propre projet, vous souhaiterez probablement l'utiliser également lorsque vous utilisez du code externe. Typeshed contient .pyi fichiers pour stdlib Python2 et Python3 et un tas de bibliothèques Python2 (comme redis , crypto , ...) et certaines bibliothèques Python3 (comme werkzeug ou requêtes ), tous joliment versionnés.


Alternatives de PyCharm à .pyi des dossiers

Si vous êtes paresseux ou si vous travaillez simplement sur un projet qui ne nécessite pas .pyi fichiers et vous ne voulez pas être dérangé par l'utilisation d'outils tiers, PyCharm vous permet d'utiliser:

20
sjaustirni

J'ai écrit un makefile pour cela:

package := example
sources := $(wildcard $(package)/*.py)

stub: $(sources)
    stubgen --output . --package $(package)

dist: setup.py stub
    python $< sdist bdist_wheel

publish: dist
    twine upload dist/*

.PHONY += stub dist publish

Fonctionnement make publish générera le .pyi fichiers au même emplacement que leur .py fichiers avant l'empaquetage et le téléchargement sur PyPI. Ils seront inclus dans le package à condition qu'ils fassent partie de package_data .

0
Matheus Moreira