One of my Python problems was to name modules in my projects. Whenever I had used same module name with built-in one or higher level modules, I was getting in trouble. Because, when I try to import built-in or higher level libraries in my code, only my module was seen and I had import error.
Here is clear explanation; Assume that I have a Project structer like;
* root * my_app * logging * __init__.py * my_logging_code.py * my_code.py
Whenever I try to import built-in logging libraray to
logging modules was overriding it and I can't import it. Here is the situation
import logging logger = logging.getLogger(__name__)
The result was;
Traceback (most recent call last): File "<input>", line 3, in <module> AttributeError: 'module' object has no attribute 'getLogger'
I realised that it was seeing my
logging module totaly. Only way I saw was to change my module name and it was really bothering me about Python.
Today I found a way by not changing my module name. Solution was to use
absolute_import. Here is the true version of
from __future__ import absolute_import import logging logger = logging.getLogger(__name__)
So, after now, feel free to use built-in module names and higher level library names like; django,celery etc.