Запуск python script через символическую ссылку

У меня есть исполняемый python script, который существует в каталоге "scripts", и там есть символическая ссылка на этот script (используемый для запуска файла) в корневом каталоге. Что-то вроде:

.
├── scripts
│   ├── const.py
│   ├── fops.py
│   ├── i_build.py
│   └── i_Props.ini
└── build_i -> scripts/i_build.py

Я хотел бы иметь возможность запускать/запускать мои скрипты с помощью:

python build_i

В корневом каталоге. I_build.py script попытается открыть i_Props.ini и сделать некоторую магию, основанную на том, что там.

Проблема заключается в том, что при запуске i_build.py script через символическую ссылку в корневом каталоге i_build.py script будет выглядеть в корневом каталоге для других файлов (а не в каталоге /scripts, где i_build.py).

Файл i_build.py имеет расположение файла реквизита как:

PROP_FILE = "i_Props.ini"

и пытается открыть это, а затем не удается. Я не хочу жестко указывать путь по понятным причинам.

Быстрое добавление теста os.getcwd() в основной файл подтверждает мои подозрения, что он считает, что CWD является корневым каталогом, а проверка __file__ говорит о том, что это символическая ссылка ( "build_i" ).

Есть ли что-нибудь, что я могу сделать, чтобы python использовал назначение символа как для имени __file__ и CWD?

Ответ 1

Вы можете использовать __file__, но вы должны принять некоторые меры предосторожности, чтобы получить реальный путь:

import os
base_dir = os.path.dirname(os.path.realpath(__file__))

Затем загрузите другие файлы/ресурсы относительно base_dir:

some_subdir = 'my_subdir'
some_file = 'my.ini'

ini_path = os.path.join(base_dir, some_subdir, some_file)

Ответ 2

Просто несколько возможностей spring:

  • В корневой каталог есть файл оболочки, который вызывает ваш питон script по явному пути.
  • Добавьте каталог, в котором он живет, к вашему пути.
  • В частности, добавьте каталог в sys.path