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

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

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

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

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 Все работает, как и ожидалось. Но это чувствует себя неправильно, чтобы сделать. Я чувствую, что я пропускаю что-то фундаментальное о именах пакетов и разрешении в Питоне здесь.

Есть ли правильный способ сделать эту работу, которая не включает в себя переименование файла FOO / XML.PY ? Или это действительно единственное решение для противоречивых имен?

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

16
задан Ian C. 14 September 2011 в 15:42
поделиться