What is absolute import in python?
我是Python的新手。我正在开发一个小项目。我需要从病房开始遵循编码标准。如何正确使用
这里描述的
绝对导入、路径、URL告诉您如何确切地获得所需的内容,通常通过指定每个部分:
1 2 3 | import os, sys from datetime import datetime from my_package.module import some_function |
相对导入、路径、URL正是它们所说的:它们与当前位置相关。也就是说,如果目录结构更改或文件移动,这些可能会中断(因为它们不再意味着相同的事情)。
1 2 | from .module_in_same_dir import some_function from ..module_in_parent_dir import other_function |
号
因此,对于将要共享的代码,首选绝对导入。
我被要求在评论中提供一个例子,说明
接受的答案更详细地解释了为什么它是这样工作的,包括讨论了python 2.5 changelog中令人困惑的措辞。从本质上讲,这个指令的范围(以及通过扩展,python中绝对导入和相对导入之间的区别)非常非常狭窄。如果您发现自己需要这些区别来使代码正常工作,那么最好尽可能重命名本地模块。
进口通常应在单独的行上:
是:导入操作系统导入系统
否:导入系统,操作系统
但可以这样说:
从子进程导入popen,pipe导入总是放在文件的顶部,在任何模块注释和docstring之后,以及模块全局和常量之前。
导入应按以下顺序分组:
标准库导入。相关第三方进口。本地应用程序/库特定的导入。您应该在每组导入之间加一个空白行。
根据PEP8:建议使用绝对导入,因为如果导入系统配置不正确(例如包中的目录以sys.path结尾),绝对导入通常可读性更强,并且往往表现更好(或至少给出更好的错误消息):
导入mypkg.sibling从mypkg导入同级来自mypkg.sibling导入示例但是,显式相对导入是绝对导入的可接受替代方法,特别是在处理复杂的包布局时,使用绝对导入将不必要地冗长:
从。导入同级从.sibling导入示例标准库代码应避免复杂的包布局,并始终使用绝对导入。
隐式相对导入不应使用,并且已在python 3中删除。
从包含模块的类导入类时,通常可以拼写如下:
从MyClass导入MyClass从foo.bar.yourclass导入您的rclass如果此拼写导致本地名称冲突,则显式拼写:
导入MyClass导入foo.bar.yourclass用"myclass.myclass"和"foo.bar.yourclass.yourclass"。
应该避免使用通配符导入(从import*),因为它们使名称空间中存在的名称变得不清楚,从而混淆了读卡器和许多自动化工具。通配符导入有一个可防御的用例,即将内部接口重新发布为公共API的一部分(例如,用可选加速器模块中的定义覆盖接口的纯Python实现,并且确切地说哪些定义将被覆盖还不得而知)。
https://www.python.org/dev/peps/pep-0008/导入