在Python中对导入语句进行分组

10

最近我开始学习Python并在我的Python文件上运行了Pylint。我得到了以下的评论。

from os import listdir
from os.path import isfile, join

在上面两行中,Pylinter的注释是
C:  5, 0: Imports from package os are not grouped (ungrouped-imports)

我该如何实现这个目标?

还有一条评论在下面一行

import mimetypes, time, csv, platform, base64, django, sys, os, math, uuid, linecache, logging, requests

C:  5, 0: standard import "import mimetypes, time, csv, platform, base64, django, sys, os, math, uuid, linecache, logging, requests" should be placed before "import mimetypes, time, csv, platform, base64, django, sys, os, math, uuid, linecache, logging, requests" (wrong-import-order)

上面这行代码是什么意思,为什么需要它?

在上面的两行中,我想把这两个导入语句分组在一起。我该怎么做呢?我不理解这个问题。您能否请编辑一下,让它更加清晰明了? - Code-Apprentice
1
这不是“必需的”。Pylint只关注代码风格问题,仅此而已。 - Daniel Roseman
2
根据 Python 的风格指南 PEP 8,你不应该像这样分组多个导入,而是应该将它们放在单独的行上。 - mklucz
1
@FHTMitchell 我表达不清楚,我的意思是这行代码有问题: import mimetypes, time, csv, platform, base64, django, sys, os, math, uuid, linecache, logging, requests 或者说它不是错误的,但从风格上讲不够优秀。 - mklucz
@mklucz 我明白了。抱歉。 - FHTMitchell
显示剩余2条评论
1个回答

13

PEP8建议按以下方式排序和分组导入:

导入应按以下顺序分组:

  1. 标准库导入。

  2. 相关的第三方库导入。

  3. 本地应用/库特定的导入。

每个导入组之间应该有一个空行。

在您的情况下,django和requests是第三方导入,因此应编写:

import mimetypes, time, csv, platform, base64, sys, os, math, uuid, linecache, logging

import django, requests

当你有如此多的导入时,按字母顺序排列导入(在每个组内)可能会更有用。

此外,Pylint似乎喜欢PEP8以外的分组方式。特别是来自同一模块/包的导入应该被放在一起。也就是说,在你的os导入和其余导入之间添加一个空格,甚至可以将裸的os导入放在那里。总之:

import os
from os import listdir
from os.path import isfile, join

import base64, csv, linecache, logging, math, mimetypes, platform, time, sys, uuid

import django, requests 

4
这行代码中导入多个模块的方式不符合PEP8规范,建议将其拆分为多条单独的导入语句。PEP8要求:“通常应该将导入放在单独的行上:”。需要拆分的模块包括:base64、csv、linecache、logging、math、mimetypes、platform、time、sys和uuid。 - FHTMitchell
1
确实。但我不确定这是否是pylint所要求的。 - jmd_dk
1
pylint的分组仅意味着来自同一包的导入应在连续行中,不需要在不同组之间添加任何空格 - user11323942

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接