Compte tenu de ce scénario:
b.py:
import A
# A is unused here
c.py:
from b import A
# A is used here
PyCharm se plaint dans b.py que "l'importation A" est une importation inutilisée et qu'optimize les supprime, interrompant l'importation dans c.py
Je sais que ces importations chaînées ne sont pas une bonne pratique (bien que vous puissiez l'utiliser pour implémenter un module de façade), mais est-ce moi ou est-ce un échec de PyCharm?
Pour autant que je sache, ce comportement est pas traité comme une inspection ou une autre option configurable, ce qui signifie qu'il n'y a pas de #noinspection UnusedImport
(ou équivalent) pouvant être placé avant les importations.
Si vous ne voulez pas définir un bloc inutilisé où vous utilisez ces variables, il existe un autre moyen simple et probablement meilleur pour atteindre ce que vous voulez:
#b.py code
import A
# [...] your code
__all__ = ['A', ...] # *all* the names you want to export
PyCharm est assez intelligent pour regarder __all__
et évitez de supprimer A
en tant qu'importation inutilisée. Cependant, il y a une limitation que __all__
doit être un simple littéral de liste. Vous ne pouvez pas faire des choses comme:
__all__ = ['A'] + [name for name in iterable if condition(name)]
Pas même:
x = 'b'
__all__ = ['A', x]
Définition de __all__
est une bonne pratique pour rendre votre module *
- importez de toute façon, c'est quelque chose que vous devriez déjà faire.
Vous pouvez réellement utiliser le marqueur PyUnresolvedReferences
pour désactiver l'inspection de votre déclaration d'importation:
# noinspection PyUnresolvedReferences
import A
Référence: bug PyCharm PY-224
from C import A, B
assert A is not None and B is not None
# or:
_ = (A, B); del _
Travaille pour moi. Je n'aime pas
# noinspection PyUnresolvedReferences
car cela donnerait de faux négatifs dans le cas où A ne peut pas être importé. Et
__all__ = ['A', 'B', ...]
est cryptique et n'est pas pratique pour le refactoring.