web-dev-qa-db-ja.com

vscode autopep8インポート前のステートメントを許可

pythonプラグインとautopep8でvscodeを使用しています

"editor.formatOnSave": true

インポートする必要があるローカルパッケージがあるので、次のようなものがあります

import sys
sys.path.insert(0, '/path/to/packages')
import localpackage

しかし、保存すると、vscode/autopep8はすべてのインポートステートメントをコードの前に移動するため、pythonがローカルパッケージを見つけることができません。

import sys
import localpackage
sys.path.insert(0, '/path/to/packages')

vscode/autopep8に、インポートの前にステートメントを置いても問題ないことを伝えるにはどうすればよいですか、またはローカルパッケージをインポートするより正確な方法はありますか?

回避策として、ifステートメントでインポートすると問題ないようです。

import sys

sys.path.insert(0, '/path/to/packages')
if 'localpackage' not in sys.modules:
    import localpackage
10
waspinator
  1. 設定を開く
  2. Autopep8を検索します。次の結果が表示されます。

enter image description here

  1. 最初のオプションの下にある「settings.jsonで編集」をクリックします
  2. 次の引数をユーザー設定jsonに追加します。

"python.formatting.autopep8Args": ["--ignore", "E402"]

enter image description here

これはautopep8に、「モジュールレベルのインポートがファイルの先頭にない」というエラー402を無視するように指示します(pep8の エラーのリスト )。

これと同じ方法を使用して、autopep8設定を変更できます。たとえば、インデントのみを修正したい場合は、"python.formatting.autopep8Args": ["--select", "E1"]を使用できます

autopep8 readme には、使用可能なオプションの詳細が記載されています。

17
willk

インポートの並べ替えを一般的に無効にしたくないが、特定の行に対してのみ無効にする場合は、行の最後に次のプラグマを使用できます。

# noqa

または

# nopep8
4
leosh