繁体   English   中英

python导入忽略本地包

[英]python import ignoring local package

请注意,这样做不是一个好主意。 它容易混淆,容易出错,而且通常完全没必要。

但是为了便于讨论,假设您有一个本地包,该包与全局包同名:

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包而不是本地定义的包?

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

在python2.5 + *中 ,您可以使用以后的导入方式解决此问题:

from __future__ import absolute_import

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

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


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

反之亦然。

# 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM