Есть ли способ для 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 поддерживает указание нескольких файлов конфигурации , расположенных в разных каталогах. Хотя этот подход не является полностью автоматическим, поскольку необходимо указать файлы конфигурации.