vscode autopep8 разрешить операторы перед импортом

Я использую vscode с плагином Python и Autopep8 с

"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

4 ответа

Решение
  1. Открыть настройки
  2. Поиск autopep8. Вы должны увидеть следующие результаты:

  1. Нажмите "Изменить в settings.json" под первым вариантом
  2. Добавьте следующий аргумент в настройки пользователя json:

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

Это говорит autopep8 игнорировать ошибку 402: "Импорт на уровне модуля не в начале файла" (вот список ошибок в pep8)

Вы можете использовать этот же метод для изменения любого из autopep8 Настройки. Например, если вы хотите исправить только отступ, вы можете использовать "python.formatting.autopep8Args": ["--select", "E1"]

В файле readme для autopep8 содержится более подробная информация о доступных параметрах.

Если вы не хотите вообще отключать сортировку импорта, а просто отключите ее для определенной строки, вы можете использовать следующие прагмы в конце строки:

# noqa

или

# nopep8

Из-за изменений в vscode (~1.84) синтаксис ответа Уилка"python.formatting.autopep8Args": ["--ignore", "E402"]больше не работает, новый формат:

"autopep8.args": ["--ignore", "E402"]

документы

Другое решение - сделать код отступом:

      import sys
if True:
    sys.path.insert(0, '/path/to/packages')
import localpackage
Другие вопросы по тегам