Подтвердить что ты не робот

Как разрешить конфликты пространства имен в моих пакетах Python со стандартными именами пакетов библиотеки?

Я разрабатываю пакет со следующей структурой на диске:

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

Пакет xml.py предоставляет класс, который выполняет некоторый собственный синтаксический анализ и перевод XML для других компонентов пакета с использованием анализатора потока SAX. Так оно и есть:

import xml.sax
import xml.sax.handler

Но когда я использую foo.xml в приложении, я получаю:

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

Кажется, у меня конфликт пространства имен. Если я переименую xml.py в нечто вроде xmlparser.py, все будет работать так, как ожидалось. Но это кажется неправильным. Я чувствую, что у меня отсутствует что-то фундаментальное в именах пакетов и их разрешении в Python.

Есть ли способ сделать эту работу, которая не включает в себя переименование файла foo/xml.py? Или это действительно единственное решение для конфликтующих имен?

Изменить: "Не называть имена так же, как стандартные модули Python", кажется... ну... мне нужен шахматный вал. Это движущаяся цель, стандартный набор модулей, которые неизбежно меняются и растут с течением времени. Поэтому, если вы не будете действительно креативны с вашими именами, решения переименования-вещей-до-вы-что-то-то-не-конфликты кажутся мне бедными. Кроме того, у меня уже есть уникальное имя пакета с foo (я не использую foo, но что-то уникальное), должно быть, этого недостаточно?

4b9b3361