web-dev-qa-db-fra.com

"Avertissement d'importation non utilisé" et pylint

Je travaille donc sur un projet en Python et j'essaie de le maintenir aux normes avec pylint et plus généralement. Donc, j'ai un fichier source, (nous l'appellerons simplement a.py)

#a.py
import loggingsetup

def foo():
   log.info("This is a log message")

Mais, je veux contrôler à quoi ressemble la journalisation, donc dans loggingsetup, j'ai quelque chose comme:

#loggingsetup.py
import logging

logging.root.setLevel(logging.DEBUG)

consoleOut = logging.StreamHandler()
consoleOut.setLevel(logging.INFO)  
consoleOut.setFormatter(logging.Formatter("\t"+logging.BASIC_FORMAT))
logging.root.addHandler(consoleOut)

#etc

Maintenant, cela semble bien fonctionner. Je suppose qu’en guise de question préliminaire, je devrais demander si c’est la bonne façon de procéder, ou s’il existe une autre façon de structurer mon code qui serait préférable. 

Mais ma principale question est que lorsque je lance pylint sur apy, un avertissement du type "import - import loggingsetup inutilisé" apparaît, car je n’appelle pas de méthode ni de fonction à partir de loggingsetup. 

Je pourrais faire quelque chose comme redéfinir le corps de loggingsetup en tant que fonction et l'appeler, mais cela semble idiot et sujet aux erreurs (je devrais m'inquiéter de l'appeler deux fois si je faisais importer loggingsetup d'un autre Python gère les importations, ce n'est pas un problème avec ma configuration actuelle). 

Je pourrais évidemment dire à pylint de ne pas tenir compte de l'avertissement, mais je pensais que je demanderais d'abord à cet endroit de m'assurer que ce n'est pas quelque chose que je devrais gérer différemment. 

22
Retsam

L’approche que j’utiliserais est d’utiliser loggingsetup comme une sorte de wrapper pour logging.

import logging

# set up logging config here

from logging import *

Ensuite, dans vos autres modules, vous:

import loggingsetup as logging

Vous voudrez peut-être utiliser un nom autre que loggingsetup dans ce cas, par exemple. tweaked_logging ou logging_with_my_settings.

11
kindall

Dans ce cas, vous pouvez toujours indiquer explicitement à pylint que cette importation non utilisée est destinée:

import loggingsetup # pylint: disable=unused-import

Notez que l'instruction se trouve sur la même ligne que l'importation. W0611 n'est donc désactivé que pour cette ligne et non pour tout le bloc ci-dessous.

26
sthenault

Si vous utilisez pylint et flake8, vous pouvez ignorer l'avertissement d'importation non utilisé dans les deux outils de la manière suivante:

import loggingsetup  # noqa # pylint: disable=unused-import
13
rutsky

votre code devrait être dans une fonction appelée une fois dans le script principal

4
Xavier Combelle

Comme vous l'avez mentionné, le fait d'envelopper une fonction et d'appeler explicitement le programme d'installation résoudrait cet avertissement. Et comme Steven l'a mentionné, cela serait considéré comme un meilleur code car il est plus explicite sur ce que vous faites.

Si vous ne souhaitez pas appeler cette fonction deux fois, vous pouvez bien sûr utiliser un indicateur interne du module pour permettre l’exécution du corps de la fonction une seule fois.

__initialized = False

def init():
    if not __initialized:
        __initialized = True
        #DoStuff
4
Michael Mauderer

Voici comment vous pouvez satisfaire l'avertissement (vscode + pylint);

from array import array
ar = array('i', [])

Ainsi, au lieu d’utiliser un caractère joker, spécifiez à nouveau la méthode "array".

0
TABISH