使 isort 将来自 Django 应用程序的导入识别为第一方导入
Make isort recognize imports from Django apps as first-party imports
我正在开发一个包含许多不同 Django 应用程序的项目。
我想在此项目上使用 isort
,但 isort
将来自 Django 应用程序 (from myapp1.mymodule import myfunction
) 的导入视为第三方导入。
如何让 isort
将它们识别为第一方进口?
我可以在 isort
配置中添加(在 .cfg
中):known_first_party=myapp1,myapp2...
但我必须维护这个列表。
有没有更好的方法?
很遗憾,您需要维护此列表。为了保持同步,您可以创建一个测试,您可以在其中读取 .cfg
文件中的 known_first_party
模块并将它们与您的应用程序进行比较:
获取 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(","))
您可以使用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}.")
我正在开发一个包含许多不同 Django 应用程序的项目。
我想在此项目上使用 isort
,但 isort
将来自 Django 应用程序 (from myapp1.mymodule import myfunction
) 的导入视为第三方导入。
如何让 isort
将它们识别为第一方进口?
我可以在 isort
配置中添加(在 .cfg
中):known_first_party=myapp1,myapp2...
但我必须维护这个列表。
有没有更好的方法?
很遗憾,您需要维护此列表。为了保持同步,您可以创建一个测试,您可以在其中读取 .cfg
文件中的 known_first_party
模块并将它们与您的应用程序进行比较:
获取 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(","))
您可以使用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}.")