我正在开发一个具有以下磁盘结构的软件包:
foo/
__init__.py
xml.py
bar.py
moo.py
xml.py
包提供了一个类,使用SAX流解析器对其他包组件进行一些自定义的XML解析和翻译。因此,它包含以下内容:
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
,但使用了绝对独特的名称),这不应该足够吗?
xml.sax
不在我的包中。因此,对它的相对导入无法正常工作。这实际上就是为什么它现在对我失败的原因。Python期望xml.sax
相对于我的foo.xml
包,但事实并非如此。 - Ian C.