Я написал функцию, которая учитывает eclipse отладчик и unittest .
Возвращает папку первого запускаемого вами скрипта. При желании вы можете указать __ file __ var, но главное, что вам не нужно совместно использовать эту переменную для всей вашей иерархии вызовов .
Может быть, вы справитесь с другими сложными случаями, которых я не видел, но для меня это нормально.
import inspect, os
def getRootDirectory(_file_=None):
"""
Get the directory of the root execution file
Can help: /37816/kak-ya-mogu-poluchit-put-i-imya-faila-kotoryi-vypolnyaetsya-v-nastoyaschee-vremya
For eclipse user with unittest or debugger, the function search for the correct folder in the stack
You can pass __file__ (with 4 underscores) if you want the caller directory
"""
# If we don't have the __file__ :
if _file_ is None:
# We get the last :
rootFile = inspect.stack()[-1][1]
folder = os.path.abspath(rootFile)
# If we use unittest :
if ("/pysrc" in folder) & ("org.python.pydev" in folder):
previous = None
# We search from left to right the case.py :
for el in inspect.stack():
currentFile = os.path.abspath(el[1])
if ("unittest/case.py" in currentFile) | ("org.python.pydev" in currentFile):
break
previous = currentFile
folder = previous
# We return the folder :
return os.path.dirname(folder)
else:
# We return the folder according to specified __file__ :
return os.path.dirname(os.path.realpath(_file_))