Сделать так, чтобы isort распознавал импорт из приложений Django как собственный импорт

Я работаю над проектом с множеством разных приложений Django.

Я хочу использовать isort в этом проекте, но импорт из приложений Django (from myapp1.mymodule import myfunction) видят isort как сторонний импорт.

Как я могу сделать isort признать их как сторонний импорт?

Я мог бы добавить в isort конфигурация (в .cfg): known_first_party=myapp1,myapp2... но мне придется вести этот список.

Есть ли способ лучше?

0 ответов

Вы можете использовать src_pathsвозможность указать папку проекта. Вам не нужно поддерживать known_first_partyсписок. Связанный исходный код (https://github.com/PyCQA/isort/blob/5.6.4/isort/place.py#L63-L95):

if (
    _is_module(module_path)
    or _is_package(module_path)
    or _src_path_is_module(src_path, root_module_name)
):
    return (sections.FIRSTPARTY, f"Found in one of the configured src_paths: {src_path}.")

К сожалению, вам необходимо поддерживать этот список. Чтобы он всегда синхронизировался, вы можете создать тест, внутри которого вы можете прочитать known_first_party модули в .cfg файл и сравните их со своими приложениями:

Получить приложения django

from django.apps import apps

print([app.name for app in apps.get_app_configs() if not app.name.startswith("django.")])

Получить known_first_party Программы

import configparser

config = configparser.ConfigParser()
config.read('setup.cfg')
print(config["isort"]["known_first_party"].split(","))
Другие вопросы по тегам