2012-03-07 17 views
9

Estoy desarrollando software para Windows con Python. Estoy desarrollando en Linux, y estoy usando Pylint para verificar mi código. no puede deshacerse del error:cómo decirle a pylint que ignore ciertas importaciones?

F| Unable to import '_winreg' 

Esto es obvio - Python en Linux no tiene este módulo.

Entonces, ¿qué tengo que poner en mi .pylintrc para ignorar este error?

Gracias de antemano, Oz

EDIT:

Documentación dice:

:F0401: *Unable to import %r* 
    Used when pylint has been unable to import a module. 

Ahora tengo que encontrar la manera de usarlo ...

solución parcial:

pylint --disable=F0401 <filename> 

Todavía estoy buscando una manera de hacerlo a través de .pylintrc.

Respuesta

6

Para aquellos que realmente quieren hacer caso omiso de los módulos, que estoy poniendo aquí mi pequeño parche para pylint: En '/pylint/checkers/imports.py'

262  def get_imported_module(self, modnode, importnode, modname): 
+263   import sys 
+264   ignoreModules = ['_winreg', 'your', 'bogus','module','name'] 
265   try:   
+266    if sys.platform =='linux2' and modname not in ignoreModules: 
267     return importnode.do_import_module(modname) 
268   except astng.InferenceError, ex: 
269    if str(ex) != modname: 
270     args = '%r (%s)' % (modname, ex) 

Esta pequeña hack hace el trabajo mejor que ignorar todas las advertencias. De manera óptima, si tengo tiempo, pondré un parche para hacerlo a través del archivo .pylintrc.

+0

¿Alguna vez ha encontrado el tiempo para enviar ese parche? –

+0

no, cuando lo publiqué, nunca lo pensé. – Oz123

+0

Parece que la próxima versión de pylint 1.5.0 contendrá un parche como este. –

0

[Editar: Esta no es la solución deseada ya que un cambio en el archivo de comprobación pylint se solicita, pero lo dejo en el caso de que el código en sí se puede cambiar, lo que puede no después de un comentario]:

Put un bloque try/except alrededor de la declaración de importación.

O incluso mejor. algo así como:

CONFIG = 'Unix' 


if CONFIG == 'Unix': 
    import UnixLib 
elif CONFIG == 'Win': 
    import WinLib 
else: 
    assert False 
+4

bastante problemático - Quiero que pylint lo ignore. no cambiar mi código, lo que debería funcionar en este caso porque es un built-in de python. – Oz123

9

Una solución que he visto empleada en mi lugar de trabajo, donde hay un módulo especial que Pylint no puede obtener (Python está integrado y este módulo especial está dentro del ejecutable principal, mientras que pylint se ejecuta de forma regular Instalación de Python) es burlarse de él creando un archivo .py y colocándolo en la ruta de python cuando ejecuta pylint (consulte PyLint "Unable to import" error - how to set PYTHONPATH?).

Por lo tanto, es posible que tenga un directorio "pylint-fakes" que contenga un _winreg.py vacío (o si necesita comprobar nombres importados, no vacíos, pero con variables falsas).

+0

Chris, gracias por su sugerencia. De hecho, hice lo mismo con un módulo integrado en nuestro lugar de trabajo. Mi módulo ficticio contiene todos los miembros del módulo real. Esta es también una solución válida. Obtienes un voto positivo por eso, por supuesto :-) – Oz123

6

Sólo tiene que ejecutar en esto también con el siguiente código:

8: if os.name == 'nt': 
9: import msvcrt 
10: else: 
11: import fcntl 

pylintfailed the build con este error:

E: 9, 4: Unable to import 'msvcrt' (import-error) 

El solution está disponible desde 0 pylint.10:

9: import msvcrt # pylint: disable=import-error 
Cuestiones relacionadas