Запуск 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