проблемы с импортом в настройках monorepo

#python

Вопрос:

Я борюсь с проблемами импорта с помощью Python. Я работаю в режиме монорепо, где другие каталоги не связаны с python. Ниже приведена структура каталога.

 monorepo  services  app1  app2  __init__.py  src  __init__.py  api  __init__.py  foo1.py  foo2.py  app3  

Я хочу использовать структуру импорта from app2.api.foo1 import Foo1 в foo2.py сценарий.

В обоих случаях это не удается. Я вижу путь к app2 в sys.path, но все равно python не рассматривает это как модуль. Чтобы экспортировать путь: я пытался. PYTHONPATH="${PYTHONPATH}:$(realpath $(pwd))" на уровне терминала и sys.path.append(full_path_app2) консоли. По-прежнему появляется ошибка импорта.

Есть какая-нибудь помощь в том, как это решить?

Ответ №1:

Импорт Python может быть сложным.

  • Python будет искать импортируемые модули внутри PythonPath (sys.path).
  • Импортируемые модули-это вложенные папки в любом месте пути, содержащие __init__.py файл.
  • Если вы вызываете файл сценария напрямую python script.py , директория, содержащая этот файл, автоматически добавляется в путь. Если вы используете синтаксис модуля python -m mymodule , он выполнит поиск PYTHONPATH и выполнит первый модуль с именем mymodule .

Чтобы импортировать app2, вам нужно добавить monorepo/services его в PythonPath. Это также должно позволить вам напрямую импортировать файлы в app2, т. е. from app2 import xyz .

Если вы работаете с monorepos, вам необходимо добавить в путь все папки, которые могут содержать модули python. Я бы рекомендовал сделать это с помощью переменной среды PYTHONPATH вместо изменения sys.path программно.