Я поделюсь с вами проблемой, которая у нас на работе. У нас есть репозиторий, и есть файлы, распространяющиеся повсюду (в настоящее время мы пытаемся заставить всех убраться) Проблема заключается в том, что с каждым созданным файлом нам нужно сделать 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.