Comment puis-je résoudre les conflits d'espace de noms dans mes paquets Python avec la bibliothèque standard de noms de paquets?

Je suis en train d'élaborer un paquet avec la structure suivante sur le disque:

foo/
   __init__.py
   xml.py
   bar.py
   moo.py

La xml.py paquet fournit une classe qui fait du XML personnalisé d'analyse et de traduction pour les autres composants de paquet à l'aide d'un SAX flux de l'analyseur. De sorte qu'il a en lui:

import xml.sax
import xml.sax.handler

Mais quand je vais à utiliser foo.xml dans une application, j'obtiens:

Traceback (most recent call last):
  File "testxmlparser.py", line 15, in <module>
    import foo.xml
  File "~/code/foo/xml.py", line 39, in <module>
    import xml.sax
ImportError: No module named sax

Je semblent avoir un espace de conflit. Si je renomme xml.py à autre chose comme xmlparser.py tout fonctionne comme prévu. Mais cela se sent comme la mauvaise chose à faire. J'ai l'impression que je manque quelque chose de fondamental sur les noms de packages et de résolution en Python ici.

Est-il une bonne façon de faire ce travail qui n'implique pas de me renommer le foo/xml.py fichier? Ou est-ce vraiment la seule solution pour le conflit de noms?

Edit: Le "éviter de nommer les choses de la même standard des modules Python" paraît-il...eh bien..un puits de mine à moi. C'est une cible en mouvement, le module standard défini, qui est lié à la croissance et le changement au fil du temps. Donc, sauf si vous obtenez vraiment créatif avec vos noms de la renommer les-choses-que-vous-trouver-quelque-chose-qui-ne-conflit solutions semble mauvais pour moi. D'ailleurs, j'ai eu dans un unique nom du package avec foo déjà (je ne suis pas en utilisant foo, mais quelque chose qui est certainement unique), ne pourrait-il pas suffire?

InformationsquelleAutor Ian C. | 2011-09-14