Python 3 绝对导入不起作用

Python 3 absolute import does not work

我有一个包含两个文件的文件夹:test.py 和 csv.py。在 test.py 我有

import csv

这会导入我的 csv.py 文件,而不是导入内置的 csv 模块。

为什么?我认为绝对导入在 Python 3?

中是默认的

如何强制 Python 加载内置的 csv 模块?

from __future__ import absolute_import

没有帮助。也没有

csv = __import__('csv', level=0)

根据文档,应该 "only perform absolute imports".

重命名 csv.py 不是可接受的解决方案。另外我宁愿不使用 "from module import something" 语法(在这种情况下它没有帮助)。

(在 Linux Mint 17.1 上使用 Python 3.4.0)

您有一个顶级 csv 模块,它位于 . 路径上,因此它在内置模块之前找到。这就是绝对导入 .

的工作原理

如果您希望 csv 成为 'local',请将您的模块移动到一个包中。将您的模块移动到包含您的包名称的目录中,并添加一个 __init__.py 文件(它可以是空的)。然后,您的 csv 模块被命名为 yourpackage.csv,并且不会被视为顶级模块。