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