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 ответа
- Открыть настройки
- Поиск autopep8. Вы должны увидеть следующие результаты:
- Нажмите "Изменить в settings.json" под первым вариантом
- Добавьте следующий аргумент в настройки пользователя 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