Ian*_* C. 16 python namespaces packages package-structuring
我正在开发一个在磁盘上具有以下结构的包:
foo/
__init__.py
xml.py
bar.py
moo.py
Run Code Online (Sandbox Code Playgroud)
该xml.py包提供了一个类,该类使用SAX流解析器为其他包组件执行一些自定义XML解析和转换.所以它有:
import xml.sax
import xml.sax.handler
Run Code Online (Sandbox Code Playgroud)
但是当我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
Run Code Online (Sandbox Code Playgroud)
我似乎有一个命名空间冲突.如果我重命名xml.py为其他东西,就像xmlparser.py一切按预期工作.但这感觉是错误的做法.我觉得我在这里缺少Python中包名和解析的基本内容.
有没有一种正确的方法来完成这项工作,而不涉及我重命名foo/xml.py文件?或者这真的是冲突名称的唯一解决方案吗?
编辑:"避免命名与标准Python模块相同的东西"似乎......好吧..给我一个mineshaft.这是一个移动目标,标准模块集,随着时间的推移必然会发生变化和增长.因此,除非你真正对自己的名字有所了解,否则重命名 - 事物 - 直到找到 - 某些不冲突的解决方案对我来说似乎很不好.此外,我已经用一个独特的包装名称foo(我不使用foo,但绝对是独一无二的),这应该不够吗?
Ros*_*ews 15
如前所述在这里,使用
from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)
并在需要时使用相对导入.