OpenStack : по следам костыльного сообщения – No handlers could be found for logger “oslo_config.cfg”

Отслеживания питоньячего кода привело к удивительном открытию. В процессы установки glance чуда по мануалам мы получили, в частности два питоньячих модуля в основной системе:

# diff -u  /usr/lib64/python2.7/argparse.py /usr/lib/python2.7/site-packages/argparse.py                            
--- /usr/lib64/python2.7/argparse.py    2016-07-19 23:35:59.000000000 +0300
+++ /usr/lib/python2.7/site-packages/argparse.py        2017-02-13 19:03:46.819989914 +0300
@@ -61,7 +61,7 @@
 still considered an implementation detail.)
 """
 
-__version__ = '1.1'
+__version__ = '1.2.1'

Бл…. разработчики…

Ну что за зверинец это питон …

# rpm -qf /usr/lib64/python2.7/argparse.py /usr/lib/python2.7/site-packages/argparse.py
python-base-2.7.12-3.1.x86_64
python-argparse-1.2.1-16.1.4.noarch

Соответственно и модуль питоньячи ищет как наткнется … или как подсунут. А поскольку весь OS это питоньяче творение, то и нам заботить чтобы это все взлетало как надо, если уж не досуг ставить все ручками из сырцов в оотдельные хомячные директории сервисов.

Здесь для тех кто не помнит что ищеи и где змейка: https://docs.python.org/3/tutorial/modules.html#the-module-search-path

А поэтому есть смысл сделать так, для побеждания питонячины:

storage:/ # cat /etc/bash.bashrc.local
PYTHONPATH=.
PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7/site-packages
PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7/site-packages/PIL
PYTHONPATH=$PYTHONPATH:/usr/local/lib64/python2.7/site-packages
PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/site-packages
PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7/plat-linux2
PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7/lib-tk
PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7/lib-old
PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7/lib-dynload
PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.7
PYTHONPATH=$PYTHONPATH:/usr/lib/python27.zip
export PYTHONPATH

Дальнейшие копания в питоньячих кишках стека по поводу сабжа всеже привели в верхушку древнего модуля – oslo_config.cfg. А имено в его криворукое пользование модулем logging.

import logging
...
LOG = logging.getLogger(__name__)

Созданный обьект LOG – инвалид питониста обкурыша ))))))

А именно следующее…

Эта ошибка порождается при использовать модуля ведения журнала logging, когда он не был настроен посылать сообщение в терминал или куда ли еще. И конечно говно код не думает проверять, настроен модуль или нет.
Так как же мы это исправить? Например так:

import logging
...
logging.basicConfig(filename='/dev/null')
LOG = logging.getLogger(__name__)

PS. на тему:
http://excid3.com/blog/no-handlers-could-be-found-for-logger
https://atlee.ca/blog/posts/diving-into-python-logging.html
http://pythonsweetness.tumblr.com/post/67394619015/use-of-logging-package-from-within-a-library

Scroll to top