如何修复Flake8 isort的I001导入位置错误?
问题分析
你的flake8报错I001 isort found an import in the wrong position,指向from api_yamdb.settings import DEFAULT_FROM_EMAIL这行。这是因为isort的导入分组规则要求:第三方库导入(如django、rest_framework)要放在项目自有代码导入的前面,而你把项目内部的settings导入插在了django等第三方库导入的中间,违反了排序规则。
运行isort命令无变化,大概率是配置不匹配、缓存或权限问题导致isort没有按flake8期望的规则执行。
快速解决:手动调整导入顺序
直接把这行settings导入移到所有第三方库导入的后面、项目自有代码导入的区域,调整后的完整导入片段如下:
# 第三方库导入(先放django、rest_framework等外部依赖) from django.contrib.auth.tokens import default_token_generator from django.core.mail import send_mail from django.db.models import Avg from django.shortcuts import get_object_or_404 from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters, permissions, status, viewsets from rest_framework.decorators import action, api_view, permission_classes from rest_framework.response import Response from rest_framework_simplejwt.tokens import AccessToken # 项目自有代码导入(自己的app、项目配置等) from api.v1.filters import TitleFilter from api.v1.permissions import (AuthorAdminModeratorOrReadOnly, IsAdmin, IsAdminOrReadOnly) from api.v1.serializers import (CategorySerializer, CommentSerializer, ConfirmationCodeSerializer, GenreSerializer, ReviewSerializer, SignUpSerializer, TitleReadSerializer, TitleWriteSerializer, UserEditSerializer, UserSerializer) from api_yamdb.settings import DEFAULT_FROM_EMAIL from reviews.models import Category, Genre, Review, Title, User # 本地相对导入(当前目录下的模块) from .mixins import CreateDestroyViewSet
调整后再运行python -m flake8,I001错误应该会消失。
排查isort不工作的原因
如果想让isort自动处理,解决无响应的问题,可以尝试以下步骤:
清除isort缓存
运行命令清除缓存,强制isort重新分析文件:isort --clear-cache isort views.py统一isort与flake8-isort的配置
检查项目根目录是否有isort配置文件(如.isort.cfg、pyproject.toml),确保其分组规则和flake8-isort的要求一致。比如在pyproject.toml中添加适配django项目的规则:[tool.isort] profile = "django" sections = ["FUTURE", "STDLIB", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"] known_django = "django" known_rest_framework = "rest_framework"配置后再运行isort,应该会按规则自动排序。
检查版本兼容性
确保flake8-isort依赖的isort版本和你本地安装的isort版本一致。运行以下命令查看版本:pip show isort flake8-isort如果版本差异较大,尝试安装匹配的版本,比如:
pip install isort==5.12.0 flake8-isort==6.0.0检查文件权限
确认当前用户对views.py有写入权限,避免isort无法修改文件。
内容的提问来源于stack exchange,提问作者vanja109

