One thing that hasn't been mentioned yet is the directory structure for this project. So far, the assumption has been that you are placing all of these items within the same directory, or have an intelligent way to separate files, as in the case of tests.
The following screenshot shows the current directory structure as created on my computer:
This output was provided by the Linux tree command, and it shows all important directories and files from the project's root directory. You'll note that there are a lot of __init__.py files scattered throughout. Each directory that has an __init__.py file is treated as if it contains Python packages, regardless of whether it actually does. This prevents directories with common names, such as OS-specific directories, from hiding valid modules that happen to have the same name.