Относительный путь репо в __init__.py? - PullRequest
0 голосов
/ 31 января 2020

Я поделюсь с вами проблемой, которая у нас на работе. У нас есть репозиторий, и есть файлы, распространяющиеся повсюду (в настоящее время мы пытаемся заставить всех убраться) Проблема заключается в том, что с каждым созданным файлом нам нужно сделать RELATIVE_REPO_PATH (RRP), чтобы импортировать другие файлы в нашем репо. Репо размещается с использованием Mercurial, и все пользователи имеют клон репо на своих локальных компьютерах. У каждого из них есть возможность создавать sh и получать обновления по мере необходимости. Это означает, что RRP нигде не может быть жестко закодирован. Ниже я покажу пример нашей структуры, а также покажу, что мы в настоящее время делаем, чтобы получить RRP.

Пример нашей структуры.


    <b>.</b>
    ├── __init__.py
    ├── <b>misc_functions</b>
    │   ├── __init__.py
    │   ├── myTest.py
    │   └── <b>__pycache__</b>
    │       └── __init__.cpython-37.pyc
    └── <b>Test</b>
        ├── __init__.py
        ├── pythonfile1 (copy).py
        └── pythonfile1.py

Вот то, что мы в настоящее время делаем на работе

import os
import sys
if not hasattr(sys, 'frozen'):
    RELATIVE_REPO_PATH = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
    if __name__ == '__main__':
        sys.path.append(RELATIVE_REPO_PATH)
        sys.path.pop(0)
else:
    RELATIVE_REPO_PATH = os.path.dirname(sys.executable)

Как видите, как бы глубоко вы ни были от root репо, вам нужно добавить более или менее os.path.dirname. Мы пробовали это с циклами while, однако многие наши файлы импортируют друг друга, и это своего рода беспорядок.

Можно ли просто добавить простой фрагмент кода на верхний уровень init .py или все файлы init .py, которые бы исключали постоянную копию и вставка этого кода?

Просто чтобы уточнить, все, что мы делаем, прекрасно работает. Хотите узнать, есть ли способ установить глобальный RRP в init.py, который будет работать везде, где есть init.py.

...