Как проверить наличие директории в корне проекта без абсолютной ссылки? Python

Проект выглядит так:

project_name/logic/somefile.py
project_name/anotherfile.py

... В somefile.py я пытаюсь реализовать логику проверки наличия директории: /project_name/tmp/ и если ее там нет, то создавать эту директорию, чтобы скрипт продолжал работу. Хочу сделать это без указания полного пути.

Не придумал лучшего "костыля", как в anotherfile.py (т.к. он лежит там, где нужно) добавить переменную:

project_dir = os.getcwd()

и потом уже, импортируя эту переменную, работать с ней в somefile.py:

from anotherfile import project_dir

if not path.isdir(project_dir + '/tmp'):
        mkdir(project_dir + '/tmp')  

Но видимо, я присваиваю в переменную вызов функции, а не значение, поэтому из anotherfile.py она возвращает путь: .../project_name/, а через somefile.py эта переменная возвращает .../project_name/logic/ - такие мои догадки...

Подскажите, пож-та:

  1. Где я ошибаюсь в project_dir = os.getcwd()?
  2. Как лучше реализовать проверку и создание директории .../project_name/tmp/?

Ответы (1 шт):

Автор решения: eri

Сделай проект пакетом - добавь пустой __init__.py. Тогда

import project_name

project_name.__file__ будет **/project_name/__init__.py и вот:

import os
project_dir = os.path.dirname(project_name.__file__)

К примеру:

>>> import aiohttp
>>> aiohttp.__file__
'/home/eri/.local/lib/python3.9/site-packages/aiohttp/__init__.py'
>>> os.path.dirname(aiohttp.__file__)
'/home/eri/.local/lib/python3.9/site-packages/aiohttp'
>>> 
→ Ссылка