2009-11-04 7 views
3

J'ai cette structure de dossier:Namespace respecte l'importation relative Python

package/ 
    __init__.py 
    misc/ 
     __init__.py 
     tools.py 
    subpackage/ 
     __init__.py 
     submodule.py 

Je suis submodule.py, et je voudrais importer misc.tools. Je ne veux pas utiliser l'importation absolue pour importer package.misc.tools, car alors mon paquet ne fonctionnerait que lorsqu'il est sur le PYTHONPATH. Je veux donc utiliser les importations relatives. Mais alors, je veux aussi que le nom importé soit misc.tools, et pas seulement tools.

Est-ce possible?

Répondre

5

Qu'en est-il ...:

from .. import misc 
from ..misc import tools as _ 

print misc.tools.__file__ 

Cela rend misc.tools disponible, comme les print confirme, et avec le bon nom et son contenu.

Inévitablement, il aussi lie le même module à certains barename - j'ai choisi _ comme « barename jeter après » typique, mais bien sûr, vous pouvez del _ juste après cela, si vous le souhaitez, et que n'affectera pas misc.tools.

En outre, tout autre attribut de misc défini dans son __init__.py (ou particulièrement dans tools.py) seront disponibles, mais, si le barename misc lui-même est disponible (comme il se doit si le nom du composé misc.tools est nécessaire), il est inévitable qu'il aura tous les attributs qu'il construit pour lui-même (ou qui sont construits extérieurement pour lui à partir d'autres codes qui s'exécutent).