Questa è la pseudo-soluzione che ho escogitato per questo problema.
#pylint: disable=no-name-in-module
from numpy import array as np_array, transpose as np_transpose, \
linspace as np_linspace, zeros as np_zeros
from numpy.random import uniform as random_uniform
#pylint: enable=no-name-in-module
Poi, nel codice, invece di chiamare numpy
funzioni come np.array
e np.zeros
e così via, si può scrivere np_array
, np_zeros
ecc I vantaggi di questo approccio rispetto ad altri approcci suggeriti in altre risposte:
- La disabilitazione / abilitazione del pylint è limitata a una piccola area del codice
- Ciò significa che non devi circondare ogni singola riga che ha una chiamata di una funzione numpy con una direttiva pylint.
- Non si sta disabilitando pylint dell'errore per l'intero file, che potrebbe mascherare altri problemi con il codice.
Il chiaro svantaggio è che devi importare esplicitamente ogni funzione numpy che usi. L'approccio potrebbe essere ulteriormente elaborato. È possibile definire il proprio modulo, chiamarlo dire, numpy_importer
come segue
""" module: numpy_importer.py
explicitely import numpy functions while avoiding pylint errors
"""
#pylint: disable=unused-import
#pylint: disable=no-name-in-module
from numpy import array, transpose, zeros #add all things you need
from numpy.random import uniform as random_uniform
#pylint: enable=no-name-in-module
Quindi, il codice dell'applicazione potrebbe importare solo questo modulo (anziché numpy) come
import numpy_importer as np
e usare i nomi come al solito: np.zeros
, np.array
etc.
Il vantaggio di questo è che avrai un singolo modulo in cui tutte le numpy
relative importazioni vengono eseguite una volta per tutte, e poi lo importi con quella singola linea, ovunque tu voglia. Tuttavia devi stare attento a numpy_importer
non importare nomi in cui non esistono in numpy
quanto tali errori non verranno colti da Pylint.