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