Невозможно импортировать '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
]
Сделанные шаги
Я запустил
uv sync
, который создал новый.venv
и установил зависимости.VS Code обнаружил новое окружение и спросил, хочу ли я его использовать. Я выбрал «Да» и убедился, что виртуальная среда активирована.
Запуск
uv run manage.py runserver
работает без проблем, что означает, что Django и Celery установлены правильно.Однако, запуск
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")'