The second problem can only be solved if at the very beginning of the app the working directory is changed to appdir (os.chdir(appdir)).
Also, if we know the appdir then we can add to the module search paths (sys.path.insert(0,appdir)), solving the problem 1. and, (I think, confirm please) the 3.
Python doenst have functionality to directly query: what is the appdir for app 'myapp'?, but lets seek a portable solution. An old version of this recipe tells:
appdir = os.path.abspath(os.path.dirname(sys.argv[0]))
warning that sys.argv[0] its usualy the command line used to start the app, but not guaranted. By example, if the entry point for the app lies in main.py, and someone start the app from the python interpreter console:
>>>execfile(r'\appedir\main.py') #in linux-mac '/appdir/main.py'
then sys.argv[0] would be the empty string, at least in windows A most recent recipe ,the one that Im replacing, gets appdir as
appdir = os.path.abspath(os.path.dirname(__file__))
wich in the python console case will fail with NameError: __file__ is not defined