Esto puede parecer una pregunta para novatos, pero no lo es. Algunos enfoques comunes no funcionan en todos los casos:
sys.argv [0]
Esto significa usar path = os.path.abspath(os.path.dirname(sys.argv[0])), pero esto no funciona si está ejecutando desde otro script de Python en otro directorio, y esto puede suceder en la vida real.
__expediente__
Esto significa usar path = os.path.abspath(os.path.dirname(__file__)), pero descubrí que esto no funciona:
py2exeno tiene un__file__atributo, pero hay una solución alternativa- Cuando se ejecuta desde IDLE con 
execute()no hay__file__atributo - OS X 10.6 donde consigo 
NameError: global name '__file__' is not defined 
Preguntas relacionadas con respuestas incompletas:
- Python - Buscar ruta al archivo que se está ejecutando
 - La ruta al archivo actual depende de cómo ejecuto el programa
 - ¿Cómo saber la ruta del script en ejecución en Python?
 - Cambiar el directorio al directorio de un script Python
 
Estoy buscando una solución genérica , una que funcione en todos los casos de uso anteriores.
Actualizar
Aquí está el resultado de un caso de prueba:
Salida de python a.py (en Windows)
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
a.py
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
subdir / b.py
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
árbol
C:.
|   a.py
\---subdir
        b.py
          
NameError: global name '__file__' is not definedel uso de archivos y esto no está dentro de IDLE. Piensa que__file__se define solo dentro de los módulos.