当我使用 django-reset-framework 的预提交运行 mypy 时,为什么会引发错误?

Ali*_*pqb 6 python django pre-commit django-rest-framework pre-commit.com

我正在尝试通过预提交来自动化我的测试和代码静态分析。我.pre-commit-config.yaml的如下所示:

# .
# .
# .
- repo: https://github.com/pre-commit/mirrors-mypy
    rev: 'v0.910'
    hooks:
      - id: mypy
        args: [--no-strict-optional, --ignore-missing-imports]
        exclude: "[a-zA-Z]*/[a-zA-Z]*/(migrations)/(.)*"
        additional_dependencies: [
            'tokenize-rt,
            'djangorestframework-stubs',
            'django-stubs',
        ]
Run Code Online (Sandbox Code Playgroud)

pyproject.toml

[tool.mypy]
python_version = "3.8"
plugins = ["mypy_django_plugin.main", "mypy_drf_plugin.main"]

[mypy.plugins.django-stubs]
django_settings_module = "api.shop.shop.settings"
Run Code Online (Sandbox Code Playgroud)

当我运行时pre-commit run --all-files出现以下错误:

Error constructing plugin instance of NewSemanalDjangoPlugin

Traceback (most recent call last):
  File "/home/alipqb/.cache/pre-commit/repo94ds7xs0/py_env-python3.8/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/home/alipqb/.cache/pre-commit/repo94ds7xs0/py_env-python3.8/lib/python3.8/site-packages/mypy/__main__.py", line 11, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 87, in main
  File "mypy/main.py", line 165, in run_build
  File "mypy/build.py", line 179, in build
  File "mypy/build.py", line 229, in _build
  File "mypy/build.py", line 475, in load_plugins
  File "mypy/build.py", line 453, in load_plugins_from_config
  File "/home/alipqb/.cache/pre-commit/repo94ds7xs0/py_env-python3.8/lib/python3.8/site-packages/mypy_django_plugin/main.py", line 104, in __init__
    self.django_context = DjangoContext(django_settings_module)
  File "/home/alipqb/.cache/pre-commit/repo94ds7xs0/py_env-python3.8/lib/python3.8/site-packages/mypy_django_plugin/django/context.py", line 88, in __init__
    apps, settings = initialize_django(self.django_settings_module)
  File "/home/alipqb/.cache/pre-commit/repo94ds7xs0/py_env-python3.8/lib/python3.8/site-packages/mypy_django_plugin/django/context.py", line 72, in initialize_django
    apps.populate(settings.INSTALLED_APPS)
  File "/home/alipqb/.cache/pre-commit/repo94ds7xs0/py_env-python3.8/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
  File "/home/alipqb/.cache/pre-commit/repo94ds7xs0/py_env-python3.8/lib/python3.8/site-packages/django/apps/config.py", line 224, in create
    import_module(entry)
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'rest_framework'
Run Code Online (Sandbox Code Playgroud)

但我已经在我的环境中安装了djangoresetframework和。djangorestframework-stubs这里有什么问题?

Ant*_*ile 8

预提交在隔离环境中运行其工具,您可以根据mirrors-mypy自述文件additional_dependencies中所述控制依赖关系(正如您已经看到的那样(!))

看起来mypy_django_plugin缺少依赖项 - 特别是它尝试导入djangorest-framework因此您需要确保将这些依赖项包含在其中additional_dependencies

请注意,您不需要tokenize-rt——这只是自述文件中的一个示例,因此您可以将其删除


免责声明:我创建了预提交