Использование нескольких рабочих пространств с django без PYTHONPATH
Иногда мне нужно запустить наш проект с django backand в нескольких рабочих пространствах на разных версиях git. В процессе работы я обнаружил, что django сильно полагается на PYTHONPATH и, вероятно, из-за этого смешивает рабочие пространства.
Когда я вызываю, например, python manger.py runserver
, я вижу, что исходники берутся из другого рабочего пространства.
Напротив, если я удалю оба рабочих пространства из PYTHONPATH (а это было единственное, что там было), то вышеприведенная команда завершится с печально известной ошибкой:
File "/opt/homebrew/Cellar/python@3.11/3.11.0/Frameworks/Python.framework/Versions/3.11/lib/python3.11/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
File "<frozen importlib._bootstrap>", line 1142, in _find_and_load_unlocked
ModuleNotFoundError: XYZ
Для меня это выглядит так, как будто он не может найти модули вне django, который был получен другим способом из пути PYTHONPATH. Поскольку все наши модули, включая тот, о котором сообщается, что он отсутствует, находятся на том же уровне, что и django, я попытался расширить sys.path в manage.py следующим образом:
import pathlib
def main():
current_dir = pathlib.Path().resolve()
[sys.path.append(str(x)) for x in current_dir.parent.iterdir() if
x.is_dir() and not x.name.startswith(".")]
Хотя я вижу, что путь расширяется, вышеуказанное исключение все равно возникает.
Любая помощь по использованию нескольких рабочих пространств, содержащих django без PYTHONPATH, будет высоко оценена, спасибо заранее.