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