#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
программно.