2012-05-04 16 views
13

Sto verificando un modulo con Pylint. Il progetto ha questa struttura:Pylint: l'importazione relativa dovrebbe essere

/builder 
    __init__.py 
    entity.py 
    product.py 

Entro prodotto che ho importare un'entità in questo modo:

from entity import Entity 

ma pylint lamenta che:

************* Module builder.product 
W: 5,0: Relative import 'entity', should be 'builder.entity' 

Tuttavia from builder.entity import Entity non riconosce il pacchetto, e from ..builder.entity import Entity non funziona neanche. Di cosa si lamenta Pylint? Grazie

risposta

14

Python 2.5 introduce le importazioni relative. Ti permettono di fare

from .entity import Entity 
+1

Grazie per -1 senza preavviso perché. – glglgl

+3

Cosa intendi per "nuovo abbastanza"? – PlasmaBinturong

+0

@PlasmaBinturong "abbastanza nuovo" si riferisce all'introduzione di importazioni relative in Python 2.5 o giù di lì. – glglgl

0

la risposta di glglgl è corretta se si dispone di una versione più recente di Python.

Tuttavia, se non si deve semplicemente assicurarsi che il pacchetto che si sta convalidando sia nel proprio PYTHONPATH. Vedi gli esempi qui sotto.

[sebastian ~/tmp/testpy]$ pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
F: 1: Unable to import 'testpy.b' 
[sebastian ~/tmp/testpy]$ PYTHONPATH=".." pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
+0

ho __init__.py, grazie per averlo indicato, ho modificato la mia domanda. – pistacchio

0

cosa si ottiene se si includono le seguenti righe nella parte superiore della product.py:

import builder 
print builder 

La mia ipotesi è che si sta importando un diverso modulo/pacchetto builder da qualche posto nel vostro PYTHONPATH che è prima di quello che stai usando.

6

Il file __init__.py fa pensare a pylint che il proprio codice sia un pacchetto (ovvero "builder").

Perciò quando pylint vedere "da un'entità importazione Entity", lo rileva correttamente come un implicito relativa importazione (si può fare di importazione relativa esplicito utilizzando '' dal Python 2.6, come altri utenti hanno pubblicizzato) e dei rapporti.

Quindi, se "dall'entità di importazione builder.entity" non funziona, è un PYTHONPATH pb: assicurarsi che la directory contenente la directory "builder" sia nel tuo PYTHONPATH (un pb alternativo proposto da gurney alex). A meno che tu non abbia intenzione di scrivere un pacchetto, rimuovere la __init__.py è probabilmente la strada da percorrere.

Problemi correlati