Есть ли способ для isort автоматически обнаруживать модули firstparty vs thirdparty в кодовой базе с несколькими автономными пакетами?

В project codebase, есть несколько автономных пакетов в папке с названием plugins, и каждый пакет находится в своей собственной папке с setup.py файл в нем, а сам проект представляет собой пакет python со своим setup.py файл.

У меня есть две папки, project/project и plugins/myplugin_one/project_plugins/myplugin_one, что меня нужно учитывать first_party и third_partyпри необходимости. Например, внутри plugins/myplugin_one/project_plugins/myplugin_one, есть файл config.py с этим кодом:

from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional

# First Party
from project.core.config_store import ConfigStore

Импорт from project.core.config_store import ConfigStore рассматривается как first_party импорт, но его следует рассматривать как third_party import, потому что файл находится в plugins/myplugin_one/project_plugins/myplugin_one и myplugin_one это отдельный пакет (first_party), в то время как project является third_party в данном контексте.

Точно так же для любого импорта, находящегося в файлах внутри project/project, project/project следует считать first_party и импорт из plugins/myplugin_one/project_plugins/myplugin_one следует считать third_party.

В sections заказ на проект должен быть:

sections=
    FUTURE
    STDLIB
    THIRDPARTY
    FIRSTPARTY
    LOCALFOLDER

Это обновление с isort 4 до isort 5.4.2, поэтому разделы по умолчанию больше не first_party но third_party и __init__.py по умолчанию не пропускается.

Это мой isort.cfg файл:

[settings]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
float_to_top = true
line_length=88
ensure_newline_before_comments=True
sections=
    FUTURE
    STDLIB
    THIRDPARTY
    FIRSTPARTY
    LOCALFOLDER
import_heading_stdlib=Standard Library
import_heading_firstparty=First Party
import_heading_thirdparty=Third Party
import_heading_localfolder=Local Folder
known_first_party=project,project_plugins
known_local_folder=build_helpers,tests
src_paths=
skip=
    __init__.py

2 ответа

Как сказано в этом ответе, вы можете использовать несколько файлов конфигурации. Я напишу некоторые подробности, так как ссылки могут быть битыми.

Я думаю, вы можете просто использовать файл конфигурации isort подplugins/папка, в которой вы установилиprojectкак третье лицо .

плагины/.isort.cfg
      [settings]
known_third_party=project

В этом случае обязательно запустите isort со следующей опциейisort --resolve-all-configs .

Если вы хотите проверить, какой файл конфигурации используется, вы можете добавить--verboseвариант.

isort поддерживает обработку определенных пакетов как собственных или сторонних пакетов. Это делается с помощью опций в конфигурационном файле. В вашем случае это зависит от рабочего каталога, какие пакеты следует рассматривать как собственные или сторонние пакеты. isort поддерживает указание нескольких файлов конфигурации , расположенных в разных каталогах. Хотя этот подход не является полностью автоматическим, поскольку необходимо указать файлы конфигурации.

Другие вопросы по тегам