
この記事では『Visual Studio Codeの自動整形によるモジュールの並び替えを無効化する方法』について解説します。
こんなお悩みがある方向けの記事です。

・保存するとimport文が勝手に並び替わる...
・vscodeの設定はいじりたくない
さっそく、私が実際に直面したエラー例とともに紹介したいと思います!
※呼び方はいろいろ(オートソート・自動ソート・コード整形)ですが、この記事では「自動整形」に統一します。
import文が自動整形されるデメリット
autopep8(PythonコードをPEP 8に従い自動的にフォーマット化するツール)によって、自動整形されるこの機能。
ファイル保存毎にコードを整えてくれるので、普段は大変お世話になってます。
しかし、モジュールをコード途中におきたい時も自動整形されてしまうデメリットがあり、下記のエラーを経験しました。
① 'circular import' エラー
② 'cannot to find' エラー
これから紹介する方法で、2つとも解決します!VS Codeの設定をいじる必要は一切ありません。
import文が自動整形される時の対処法
autopep8 対処法:#noqa ( #nopep8 でもOK)をモジュール横にうつ
models.py
from app import db #noqa
from app import db #nopep8
これで、自動整形から除外してくれます◎
ちなみに、isortをお使いの場合は以下のとおり。
isort 対処法:#isort :skipをモジュール横にうつ
models.py
from app import db #isort :skip
ここからは、私が直面したエラー事例をご紹介します。
① circular import エラー
エラー文:"Import Error: cannot import 'db' from partially initialized module 'app' (most likely due to circular import )"
原因:'db'オブジェクト以降にインポートされるべきモジュール(from models import Cafe)が自動整形により並び替えられてしまう。models内のデータはdbに格納されるから、db = SQLAlchemy(app) の後にimport しなければいけない。
失敗例
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from models import Cafe
db = SQLAlchemy(app) #これより上でmodelsをimportできない
admin = Admin(app)
admin.add_view(ModelView(Cafe, db.session))
成功例
db = SQLAlchemy(app) #これ以降でimportする
from models import Cafe # noqa
admin = Admin(app)
admin.add_view(ModelView(Cafe, db.session))
エラー② cannot to find エラー
エラー文:""
原因:上位階層のディレクトリと同階層のディレクトリをimportしたい時に発生。osやsysといったモジュールを使いpath指定したいが、自動整形でうまく行きませんでした。
失敗例
成功例
まとめ
参考になれば嬉しいです!