в каждом каталоге, содержащем скрипты Python, поместите модуль Python, который знает путь к корню иерархии. Он может определить одну глобальную переменную с относительным путем. Импортируйте этот модуль в каждый скрипт. Python сначала ищет текущий каталог, поэтому он всегда будет использовать версию модуля в текущем каталоге, которая будет иметь относительный путь к корню текущего каталога. Затем используйте это, чтобы найти другие ваши файлы. Например:
# rootpath.py
rootpath = "../../../"
# in your scripts
from rootpath import rootpath
datapath = os.path.join(rootpath, "src/resources/datafile1.txt")
Если вы не хотите помещать дополнительные модули в каждый каталог, вы можете использовать этот подход:
Поместите дозорный файл в верхний уровень структуры каталогов, например, thisisthetop.txt
. Пусть ваш скрипт Python перемещается вверх по иерархии каталогов, пока не найдет этот файл. Напишите все ваши пути относительно этого каталога.
Возможно, какой-то файл, который у вас уже есть в каталоге проекта, может быть использован для этой цели (например, продолжайте двигаться вверх, пока вы не найдете каталог src
), или вы можете назвать каталог проекта таким образом, чтобы это стало очевидным.