Django не смог найти "django-filter" или "django-cors-headers", когда я использую Pantsbuild

Я настроил Pantsbuild для наших Django проектов, и все работало аккуратно. Вот мой BUILD файл:

python_requirements(
    name="reqs",
)

python_sources(
    name="lib",
    dependencies=[
        ":reqs",
    ],
)

pex_binary(
    name="manage",
    entry_point="manage.py",
    restartable=True,
)

и requirements.txt:

django==4.1.1
djangorestframework==3.13.1
django-cors-headers==3.13.0
django-filter==22.1

но когда я добавил django-filter, я столкнулся с ошибкой:

Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/xurvan/monorepo/jango/manage.py", line 8, in <module>
    import django_filters
ModuleNotFoundError: No module named 'django_filters'

мой manage.py файл выглядит следующим образом:

#!/usr/bin/env python

import os
import sys

import django_filters


def main():
    os.environ.setdefault(
        'DJANGO_SETTINGS_MODULE',
        'monorepo.jango.app.settings',
    )
    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    print(django_filters.__version__)
    main()

Интересный момент заключается в том, что print(django_filters.__version__) работает. И я могу видеть версию правильно, но затем возникает ошибка.

Я также установил Django Rest Framework, и он работает нормально. Но у меня та же проблема с django-cors-headers. Я не понимаю разницы.

Если React Front-end и Backend как DRF, используйте этот сниппет.

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOWED_ORIGINS = [
    "http://localhost:3000",
]

Я не смог понять причину странного поведения, но все, что нам нужно сделать, это отключить автозагрузчик Django. Как написала официальная группа Pantsbuild в своем Github:

с помощью runserver мы отключаем автозагрузчик Django, поскольку вместо него мы полагаемся на собственный просмотр файлов Pants, устанавливая restartable=True на pex_binary цели для manage.py

.

Запуск кода со следующей командой решил мою проблему:

./pants run src/jango:manage -- runserver --noreload
Вернуться на верх