I was wondering the same thing. The easiest thing to distribute is one file, but big files are hard to edit and maintain. Eventually you create some modules and import the module into your program. A module should have a well defined purpose, but depending on what you are doing that can result in rather large modules. You get tired of really big modules so your create sub-modules. To organize your sub-modules you create a directory structure.
It took me months to figure out how to organize my code so I could import my modules and my module inter-dependencies and unit tests and example snippets all work. Even though everything is working I have no confidence that I didn't make some really dumb choices and I'll have to reorganize everything once others start using my code. I have searched for anything that discusses this part of Python and there is not much there. Set your path. Use __import__.py files. Here is how you make a package. Good stuff, but more nuts and bolts than theory or practice.