使用 tox 错误地订购进口

Incorrectly ordered imports using tox

我正在尝试为django-rest-framework做贡献,我运行 isort之后认证文件中的导入是这样的(我添加了导入六):

from __future__ import unicode_literals

import base64

import six
from django.contrib.auth import authenticate, get_user_model
from django.middleware.csrf import CsrfViewMiddleware
from django.utils.translation import ugettext_lazy as _

from rest_framework import HTTP_HEADER_ENCODING, exceptions

当我 运行 ./runtests --lintonly 它通过了所有测试但是当我 运行 tox 它给了我这个错误:

py27-lint runtests: commands[0] | ./runtests.py --lintonly
Running flake8 code linting
flake8 passed
Running isort code checking
ERROR: /home/nitesh/open_source/django-rest-framework/rest_framework/authentication.py Imports are incorrectly sorted.
isort failed: Some modules have incorrectly ordered imports. Fix by running `isort --recursive .`
ERROR: InvocationError: '/home/nitesh/open_source/django-rest-framework/runtests.py --lintonly'

根据我在 REST 框架源代码中看到的(例如 here),six 是从 django.utils 导入的。将 import six 替换为 from django.utils import six 应该可以解决 isort 警告:

from __future__ import unicode_literals

import base64

from django.utils import six
from django.contrib.auth import authenticate, get_user_model
from django.middleware.csrf import CsrfViewMiddleware
from django.utils.translation import ugettext_lazy as _

from rest_framework import HTTP_HEADER_ENCODING, exceptions

我遇到了类似的错误 (Imports are incorrectly sorted)。

isort 在直接 运行 时很高兴,在 运行 宁通过 tox 时失败了。 isort 抱怨的行是:

import pytest

from my_module import MyThing

isort,当直接 运行 时,知道我的模块 my_module 是第一方(我自己的)代码,而通过 tox 则不是。因此,当直接 运行 时,它对 pytest 导入和我的导入之间的空行很满意,但是通过 tox 它不想看到空行,因为 pytest my_module 被解释为第三方进口。

解决方案是将此行添加到我的 setup.cfg:

[isort]
...
known_first_party = my_module