There are several parts to this question, so I will try to answer them in turn:
1: in fact, this is not so, there are no strict rules, except for those that establish that the directory should be considered as package and so on. Some structures prescribe a directory structure using a script to create forests (a bit like Rails in the Ruby world), but this is just a convenience or convention for the structure. Organize your code and modules so that they make sense logically, like in any other language.
2: What you have there is absolutely normal. Alternatively, you can use the installed script if you use distutils, console_script as part of the .egg installation, or, in extreme cases, just call main.py (or whatever you call) the script directly. For example, console_script is quite common and is used by tools such as nose , for example.
3: There is PEP for this particular topic. In my experience, although you really should prefer absolute imports to relative. To force this behavior you can do:
from __future__ import absolute_import
jkp
source share