【发布时间】:2014-10-01 13:48:16
【问题描述】:
如果我创建一个名为“json.py”的模块,其内容如下:
#! python
import json as _json
JSONDecoder = _json.JSONDecoder
..'import json as _json'语句不应该执行绝对导入,因此提供python标准库JSON模块吗?
..相反,如果我执行或导入此模块,我会得到:
$蟒蛇--版本 Python 3.4.0 $ python relative_import/json.py 回溯(最近一次通话最后): 文件“relative_import/json.py”,第 3 行,在 将 json 导入为 _json 文件“/home/silver/Projects/relative_import/json.py”,第 6 行,在 JSONDecoder = _json.JSONDecoder AttributeError:“模块”对象没有属性“JSONDecoder” $..这表明“json”正在导入自身(相对导入)。 ..我想我错过了一些东西——python的导入系统对我来说总是自然而直观的,但在这种情况下我迷路了。
编辑:我使用的是 python 3.4
编辑:对于任何感兴趣的人,这就是发生的事情: 我有一个包,其中包含一个名为“json”的模块,它取代了系统“json”。这很好(IMO),但是,我还启动了一个脚本,它位于同一个包文件夹中(暂时),但并不意味着最终成为同一个模块的一部分。因此,发生了以下情况:
- 我运行我的脚本 packagename/foo.py
- python 将 packagename 文件夹添加到 sys.path
- foo.py 导入 packagename.json
- packagename.json 导入 json(通常是系统 json)
- sys.path 上的第一个条目是 packagename 文件夹,“json”是从那里导入的
- 我的 json.py 在导入后继续加载,并遇到错误(因为它是在处理自己,而不是系统 json 模块)
解决方案:将脚本移动到我的包的“bin”文件夹,或者,如果我希望它成为包的一部分,请使用python -m packagename.foo
谢谢你,@Martijn Pieters。
【问题讨论】:
标签: python python-3.x python-import