2009-12-08 5 views
0

J'ai un projet avec une structure de répertoire qui ressemble à:En Python, comment faire référence à un identifiant par son nom complet absolu?

 
/foo/baz/__init__.py 
/bar/foo.py 
/bar/splat.py 

Le problème est, /bar/splat.py fait référence au module foo.baz. Cela échoue avec l'erreur No module named baz car il essaie de rechercher ce module dans /bar/foo.py. Je ne veux pas que Python recherche le module bar, je veux lui dire de rechercher le module racine foo pour baz. Comment je fais ça? Dans Ruby, vous préfixez simplement l'identifiant avec :: (dans ce cas, ::Foo::Baz), y a-t-il un équivalent Python?

Répondre

4

En Python 2.5 et 2.6,

from __future__ import absolute_import 

devrait changer le comportement import de Python pour faire ce que vous voulez (si la racine, /, est sys.path bien sûr ;-). Cela devient le comportement normal de Python dans 2.7 (pas encore publié, mais un alpha précoce est déjà étiqueté, si vous êtes curieux).

+0

Cool, ça a marché, merci. –

+0

Incidemment, il s'agit d'un projet App Engine, donc c'est Python 2.5.2. –

+0

@Bob, toujours heureux d'aider - btw, en mentionnant la (les) version (s) d'intérêt de Python dans la question est une bonne idée, en général, puisque certains environnements (par exemple GAE) vous contraignent à 2.5, dans la plupart des cas , d'autres essayent 3.1, etc, et les meilleures réponses peuvent souvent dépendre de quelle (s) version (s) vous intéressez! -) –

Questions connexes