Подтвердить что ты не робот

Получить местоположение исходного файла .py

Скажем, что у меня есть файл python в каталоге e:

/a/b/c/d/e/file.py

В каталоге e У меня есть несколько папок, к которым я хочу получить доступ, но если файл .py выполняется из любого места, а не из папки e, относительный путь не будет работа для меня. Также папка e может быть расположена где угодно, но всегда с набором подпапок, поэтому абсолютный путь не будет работать.

Во-первых, есть ли какая-либо функция для получения абсолютного пути относительно расположения исходных файлов?

Если нет, какие-нибудь идеи, как разобраться в этом? Захватите используемую командную строку и добавьте CWD вместе?

Моя проблема заключается в том, что эта папка устанавливается на 20 разных машинах и ОС, и я хочу, чтобы она была настолько динамичной, насколько это возможно, с небольшими конфигурациями и "правилами", где она должна быть установлена ​​и т.д.

4b9b3361

Ответ 1

# in /a/b/c/d/e/file.py
import os
os.path.dirname(os.path.abspath(__file__)) # /a/b/c/d/e

Ответ 2

Вот мое решение, которое (a) получает .py файл, а не файл .pyc, и (b) сортирует символические ссылки.

Работая с Linux, файлы .py часто привязываются к другому месту, а файлы .pyc генерируются в каталоге рядом с файлами с символическими выводами. Чтобы найти реальный путь исходного файла, вот часть script, которую я использую, чтобы найти исходный путь.

try:
    modpath = module.__file__
except AttributeError:
    sys.exit('Module does not have __file__ defined.')
    # It a script for me, you probably won't want to wrap it in try..except

# Turn pyc files into py files if we can
if modpath.endswith('.pyc') and os.path.exists(modpath[:-1]):
    modpath = modpath[:-1]

# Sort out symlinks
modpath = os.path.realpath(modpath)