Невозможно импортировать 'celery' при запуске pylint, но Django работает нормально

Я работаю над проектом Django и использую uv в качестве менеджера пакетов. Мои зависимости управляются в pyproject.toml, и у меня есть следующая настройка:

pyproject.toml (Релевантные части)

[project]
name = "port-backend"
version = "0.1.0"
description = "Backend service for port.az"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "celery>=5.4.0",
    "django==4.2",
    "djangorestframework>=3.15.2",
    "djangorestframework-simplejwt>=5.5.0",
    "drf-spectacular>=0.28.0",
]

[dependency-groups]
dev = [
    "pylint>=2.0.0",
]

[tool.pylint.MASTER]
ignore-paths = ['.venv/']
disable = [
    'C0415',  # Import outside toplevel
    'E0401',  # Import error
]

Сделанные шаги

  1. Я запустил uv sync, который создал новый .venv и установил зависимости.

  2. VS Code обнаружил новое окружение и спросил, хочу ли я его использовать. Я выбрал «Да» и убедился, что виртуальная среда активирована.

  3. Запуск uv run manage.py runserver работает без проблем, что означает, что Django и Celery установлены правильно.

  4. Однако, запуск uv run pylint . дает такие ошибки:

************* Module manage
manage.py:12:8: C0415: Import outside toplevel (django.core.management.execute_from_command_line) (import-outside-toplevel)
************* Module config.celery_app
config/celery_app.py:3:0: E0401: Unable to import 'celery' (import-error)

Что я пробовал

  • Убедитесь, что Celery установлен в .venv, запустив uv pip list, и celery присутствует.

  • Проверил, что .venv активирован в VS Code (терминал показывает (port-backend) ➜ port_backend)).

  • Попробовал запустить uv run python -c «import celery» - работает без ошибок.

Вопрос. Почему pylint не может найти Celery (E0401: Unable to import 'celery'), хотя Django и Celery прекрасно работают в manage.py? Как сделать так, чтобы pylint правильно распознавал установленные зависимости?

You might need to set PYTHONPATH to specify your root directory (Import outside toplevel).

Create a ~/.pylintrc file and change the /path/to/root to your root.

[MASTER]
init-hook='import sys; sys.path.append("/path/to/root")'

Pylint might not be picking up the .venv correctly. Try running:

PYTHONPATH=. uv run pylint . 

Or modify your pyproject.toml:

[tool.pylint.MASTER] 
init-hook='import sys; sys.path.append(".venv/lib/python3.12/site-packages")'

Вернуться на верх