Я разрабатываю пакет со следующей структурой на диске:
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
, но что-то уникальное), должно быть, этого недостаточно?