请注意,这样做并不是一个好主意。它容易混淆,容易出错,而且通常完全没必要。
但是为了争论,假设你有一个与全局包同名的本地包:
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
包而不是本地定义的替代方案呢?
答案 0 :(得分:6)
此行为是特定于python2的。在python3中,默认情况下导入是绝对的,可以解决这类问题。
在python2.5 + * 中,您可以使用将来的导入来修复此行为:
from __future__ import absolute_import
之后,所有导入都是绝对的,并导入一个与您拥有的顶级模块同名的模块,以使用显式相对导入语法。
有关更多背景信息,请参阅PEP 328。
* 编辑:在早期的python版本中,唯一的选择是以首先找到顶级模块的方式修改sys.path
- 这实际上是一个糟糕的解决方案。 / p>
答案 1 :(得分: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__
features
对于Python 2.5-2.x:
from __future__ import absolute_import