Как подавить предупреждения об устаревании в Django?

Каждый раз, когда я использую команду django-admin – даже при TAB-завершении – это бросает RemovedInDjango19Warning (и намного больше, если я использую тестовую команду). Как я могу подавить эти предупреждения?

Я использую Django 1.8 с Python 3.4 (в виртуальной среде). Насколько я могу судить, все эти предупреждения поступают из библиотек не из моего кода.

Примеры

Вот некоторые примеры:

  • …/lib/python3.4/importlib/_bootstrap.py:321: RemovedInDjango19Warning: django.contrib.contenttypes.generic is deprecated and will be removed in Django 1.9. Its contents have been moved to the fields, forms, and admin submodules of django.contrib.contenttypes. return f(*args, **kwds)

  • …/lib/python3.4/site-packages/django/contrib/admin/util.py:7: RemovedInDjango19Warning: The django.contrib.admin.util module has been renamed. Use django.contrib.admin.utils instead. "Use django.contrib.admin.utils instead.", RemovedInDjango19Warning)

  • …/lib/python3.4/site-packages/django/templatetags/future.py:25: RemovedInDjango19Warning: Loading the ``url`` tag from the ``future`` library is deprecated and will be removed in Django 1.9. Use the default ``url`` tag instead. RemovedInDjango19Warning)

Обновить

Поскольку версия Django 1.11 ( примечания к выпуску ), устаревшие предупреждения уже не являются громкими по умолчанию. Поэтому я предполагаю, что это больше не будет проблемой, поскольку 1.11 является последней версией для поддержки Python 2, а также имеет долгосрочную поддержку.

  • как преобразовать отрицательное целочисленное значение в hex в python
  • Градиентный матовый цветной график matplotlib
  • Selenium - идентифицировать веб-элемент с помощью src или alt
  • Загрузите и сохраните файл PDF с помощью модуля запросов Python
  • Найдите ближайшую дату к данной дате
  • Соответствие неправильно написанных слов с правильными в python
  • Использование partial_fit с трубопроводом Scikit
  • C массив против массива NumPy
  • 11 Solutions collect form web for “Как подавить предупреждения об устаревании в Django?”

    Я оставлю это для новичков:

    Что касается django 1.11 по умолчанию устаревшие предупреждения больше не являются громкими. Чтобы активировать их, запустите python -Wd manage.py runserver например.

    источник

    Добавление фильтра регистрации в settings.py может подавить эти предупреждения консоли (по крайней мере для команд manage.py в Django 1.7, Python 3.4).

    Фильтр может выборочно подавлять предупреждения. Следующий код создает новый фильтр «suppress_deprecated» для консоли и добавляет его к фильтрам регистрации по умолчанию. Добавьте этот блок в settings.py, чтобы настроить переменную LOGGING:

     import logging, copy from django.utils.log import DEFAULT_LOGGING LOGGING = copy.deepcopy(DEFAULT_LOGGING) LOGGING['filters']['suppress_deprecated'] = { '()': 'mysite.settings.SuppressDeprecated' } LOGGING['handlers']['console']['filters'].append('suppress_deprecated') class SuppressDeprecated(logging.Filter): def filter(self, record): WARNINGS_TO_SUPPRESS = [ 'RemovedInDjango18Warning', 'RemovedInDjango19Warning' ] # Return false to suppress message. return not any([warn in record.getMessage() for warn in WARNINGS_TO_SUPPRESS]) 

    Строка `mysite.settings.SuppressDeprecated 'должна изменяться, если корневой модуль сайта (или местоположение фильтра и / или имя) отличается.

    В manage.py добавьте это в верхнюю строку –

     #!/usr/bin/env PYTHONWARNINGS=ignore python 

    Это будет подавлять все предупреждения, которые, я согласен, в некоторых ситуациях могут быть нежелательными, если вы используете много сторонних библиотек.

    Отказ от ответственности: рекомендуется только после того, как вы уже видели предупреждения как минимум 1000 слишком много раз и должны быть удалены при обновлении Django.

    Примечание. Это может иметь некоторые нежелательные последствия для некоторых платформ, например, глотание большего количества выходных данных, чем просто предупреждения.

    В django 1.7 была введена новая настройка SILENCED_SYSTEM_CHECKS для подавления предупреждений

    Список идентификаторов сообщений, генерируемых каркасом проверки системы (т.е. ["models.W001"]), который вы хотите навсегда подтвердить и проигнорировать. Заблокированные предупреждения больше не будут выводиться на консоль; ошибки молчания все равно будут напечатаны, но не будут препятствовать выполнению команд управления.

    Документацию можно найти здесь

    Вот список всех проверок для подавления примера:

    Если вы хотите подавить предупреждение TEMPLATES_ ,

    Отдельные настройки TEMPLATE_ * устарели в Django 1.8

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

     SILENCED_SYSTEM_CHECKS = ["1_8.W001"] 

    Ничего из вышеперечисленного не работало для меня, django 1.9. Я исправил это, добавив следующие строки в settings.py:

     import logging def filter_deprecation_warnings(record): warnings_to_suppress = [ 'RemovedInDjango110Warning' ] # Return false to suppress message. return not any([warn in record.getMessage() for warn in warnings_to_suppress]) warn_logger = logging.getLogger('py.warnings') warn_logger.addFilter(filter_deprecation_warnings) 

    При просмотре предупреждений об устаревании в других зависимостях моего проекта Django 1.8, используя

     python -Wd manage.py runserver 

    , Я смог отфильтровать предупреждения об отказе от Django, временно добавив

     import warnings from django.utils.deprecation import RemovedInDjango110Warning warnings.filterwarnings(action="ignore", category=RemovedInDjango110Warning) 

    на мой settings.py (возможно, он может быть в любом модуле, загруженном при запуске). Я не мог понять, как включить фильтр как дополнительную опцию -W , т.е.

     python -Wd -Wi::RemovedInDjango110Warning manage.py runserver 

    в результате был Invalid -W option ignored: unknown warning category: 'RemovedInDjango110Warning' .

    По какой-то причине решение, предоставленное Фредом Шлейфером, не работало для меня в Django 1.9, поэтому мне пришлось найти другое решение.

    В settings.py я настраивал функцию LOGGING_CONFIG :

     LOGGING_CONFIG = 'my_project.logging_utils.configure' 

    Затем я определил свой собственный my_project.logging_utils модуль следующим образом:

     from logging.config import dictConfig import warnings from django.utils.deprecation import RemovedInDjango110Warning IGNORE_DJANGO_110_WARNINGS = { # This is a specific warning raised by a third-party library. r'rest_framework_swagger\.urls': r'django\.conf\.urls\.patterns\(\) is deprecated.*' } def configure(settings): dictConfig(settings) for module, message in IGNORE_DJANGO_110_WARNINGS.items(): warnings.filterwarnings( action='ignore', category=RemovedInDjango110Warning, module=module, message=message ) 

    IGNORE_DJANGO_110_WARNINGS dict содержит отображение из имен модулей в регулярные выражения предупреждений, поднятых ими. Я решил быть очень конкретным в тех предостережениях, которые я подавил, поскольку я все еще хотел видеть те, которых я не ожидал. По мере обновления отдельных сторонних библиотек я удаляю связанные записи из dict.

    Этот стандартный сценарий django добавляет TAB-завершение для вас bash – https://github.com/django/django/blob/master/extras/django_bash_completion

    PYTHONWARNINGS не определен – ошибка в консоли. Добавить экспорт PYTHONWARNINGS = "игнорировать" и отключить PYTHONWARNINGS в _django_completion ()

    Исходная функция:

     _django_completion() { COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \ COMP_CWORD=$COMP_CWORD \ DJANGO_AUTO_COMPLETE=1 $1 ) ) } 

    Моя версия. Не нарушайте основное поведение в других случаях.

     _django_completion() { export PYTHONWARNINGS="ignore" COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \ COMP_CWORD=$COMP_CWORD \ DJANGO_AUTO_COMPLETE=1 $1 ) ) unset PYTHONWARNINGS } 

    Django помещает предупреждения через стандартный модуль предупреждений python. Если ваш проект python выдает предупреждения, и они являются «приемлемыми» на данный момент, просто используйте warnings.filterwarnings() или warnings.simplefilter() . Я не уверен, где «лучшее» место для них, но я поместил их в свой файл common_settings.py (для меня это неизменный, зарегистрированный файл, который импортируется local_settings.py).

    Например:

    warnings.filterwarnings(action="ignore", category=RemovedInDjango110Warning, module='django.template.utils', lineno=37)

    Увы, комментарий об отключении системных проверок не будет работать, потому что ваш пример не вызывает ошибку системной проверки.

     # in settings.py import warnings from django.utils.deprecation import RemovedInDjango20Warning DEBUG = True if DEBUG: warnings.simplefilter('default') warnings.filterwarnings('ignore', category=RemovedInDjango20Warning) # use it if you annoyed by DeprecationWarning warnings.filterwarnings('ignore', category=DeprecationWarning) по # in settings.py import warnings from django.utils.deprecation import RemovedInDjango20Warning DEBUG = True if DEBUG: warnings.simplefilter('default') warnings.filterwarnings('ignore', category=RemovedInDjango20Warning) # use it if you annoyed by DeprecationWarning warnings.filterwarnings('ignore', category=DeprecationWarning) 

    Для быстрого решения только для командной строки, preface manage.py с python -W ignore при выполнении, как в:

    python -W ignore manage.py runserver

    -или-

    python -W ignore manage.py shell_plus

    -или-

    python -W ignore manage.py makemigrations

    Теперь это работает для меня, чтобы отключить все предупреждения об отмене Django 1.10 во время запуска Django 1.9.

    Interesting Posts

    SSLError: невозможно подключиться к URL-адресу HTTPS, потому что модуль SSL недоступен в Google App Engine

    Метод Pythonic для суммирования всех нечетных строк в файле

    matplotlib: игнорировать выбросы при построении графика

    Переопределение __setattr__ во время выполнения

    Эквивалент Matlab 'ismember' в numpy (Python)?

    Чтение заголовка клиента из скрипта CGI Python?

    Как символизировать слово малаялам?

    Добавление отсутствующих ключей в словаре в Python

    Виджет слайдера Python Matplotlib не обновляется

    Почему никто не является наименьшим в python?

    Подключение двух разных виджетов на qt с помощью python с помощью кнопки

    По умолчанию и выберите первый элемент в списке Tkinter

    Как запустить скрипт в Pyspark и зайти в оболочку IPython, когда закончите?

    Python: Pandas Dataframe как умножить весь столбец со скаляром

    используя pip для локального размещения пакетов, несмотря на удовлетворенные глобальные требования

    Python - лучший язык программирования в мире.