Во-первых, если вы собираетесь изменить только одно или два значения, тогда было бы проще использовать одну динамическую settings.py
(как упомянуто в ответ Галлайо * ).
Однако, если вам действительно нужны отдельные настройки, существует еще более короткий путь, определяя отдельные «проекты» в scrapy.cfg
( документы ):
[settings]
default = myproject.settings.dev
dev = myproject.settings.dev
prod = myproject.settings.prod
Затем для запуска определенногоодин:
SCRAPY_PROJECT=prod scrapy crawl myspider
SCRAPY_PROJECT=dev scrapy crawl myspider
Если вы не укажете SCRAPY_PROJECT
, он будет использовать default
.
И да, вы можете наследовать из файлов настроек.Вместо этого замените файл settings.py
на модуль:
myproject/settings/__init__.py
myproject/settings/base.py
myproject/settings/dev.py
myproject/settings/prod.py
В base.py
вы можете получить именно то, что у вас в settings.py
.Затем в верхней части каждого файла переопределения вы добавляете:
from .base import *
# Override settings in the same way as if they were declared in settings.py
Этот импорт с использованием подстановочных знаков, как правило, является плохой практикой, но в данном случае, поскольку это просто обычный файл Python, поэтому конечный результат просто содержит все переменныеимеется в наличии.Этот прием мы часто используем в Django ( пример ).