2

请注意,这样做不是一个好主意。它令人困惑、容易出错,而且通常完全没有必要。

但是为了争论,假设你有一个与全局包同名的本地包:

module/
   __init__.py
   os.py
   thisfile.py

在里面thisfile.py,你可以明确地指定你想使用以下之一来导入你的本地版本os.py

from . import os
from .os import foo

但实际上,在 python 2.x 中,本地包解析是默认的。只是一个简单的import os将加载本地os.py而不是系统包。

那么我该如何在内部thisfile.py导入系统级os包而不是本地定义的替代方案?

4

2 回答 2

6

此行为是特定于 python2 的。在 python3 中,默认情况下导入是绝对的,以解决此类问题。

在 python2.5+ *中,您可以使用将来的导入来修复此行为:

from __future__ import absolute_import

之后,所有导入都将是绝对的,并且要导入与顶级模块同名的模块,您必须使用显式的相对导入语法。

有关更多背景信息,请参阅PEP 328


*sys.path编辑:在早期的 python 版本中,唯一的选择是以首先找到顶级模块的方式进行修改- 这实际上是一个糟糕的解决方案。

于 2013-08-21T23:02:19.757 回答
1

你有相反的方式。

# Absolute import
import os

# Relative import
from . import os

文档:http ://docs.python.org/2/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

在较旧的 Python(低于 3.0 的所有版本)中,您必须手动启用它,这里有一个包含所有__future__功能的列表

对于 Python 2.5-2.x:

from __future__ import absolute_import
于 2013-08-21T23:01:48.390 回答