When you use import XXX, you import all the contents of XXX under the namespace XXX, and you have access to them using XXX.abc, XXX.example etc...
When you use from XXX import abc, you only overwrite the variable abc of your globals() dictionnary. The special from XXX import * does the same, but for all variables whose name doesn't begins with an underscore.
Finally, the "as" keyword allows you to give to the imported module/function/variable the name you want.
When you have a module containing some folders, and you want to import from another file, . refers to the directory containing the current file, .. to the directory containing it, and so on.
For a less concise / more precise answer : `from ... import` vs `import .`