Это может показаться новичком, но это не так. Некоторые общие подходы не работают во всех случаях:
sys.argv [0]
Это означает использование path = os.path.abspath(os.path.dirname(sys.argv[0])), но это не работает, если вы работаете с другим Python script в другом каталоге, и это может произойти в реальной жизни.
__ __ файл
Это означает использование path = os.path.abspath(os.path.dirname(__file__)), но я обнаружил, что это не работает:
-  
py2exeне имеет атрибута__file__, но существует обходной путь -  Когда вы запускаете из IDLE с помощью 
execute()атрибута__file__ -  OS X 10.6, где я получаю 
NameError: global name '__file__' is not defined 
Связанные вопросы с неполными ответами:
- Python - найти путь к запущенному файлу
 - Путь к текущему файлу зависит от того, как я выполняю программу
 - Как узнать путь к запуску script в Python?
 - Сменить каталог в каталог Python script
 
Я ищу общее решение, которое будет работать во всех вышеприведенных случаях использования.
Update
Вот результат теста:
Вывод python a.py(в 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")
подкаталог /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
дерево
C:.
|   a.py
\---subdir
        b.py