Я использую Makefile для проекта Python. Существуют некоторые переменные конфигурации Python, которые мне нужно включить в каждый Makefile, а Make-файлы могут находиться в разных подкаталогах в корне проекта (хотя и не более одного уровня).Включить путь для выполнения включенных Makefile
В корневом каталоге проекта, я создал Makefile.inc с, например, следующего содержания:
define PYSCRIPT
from lib.custommodule import VAR1
print(VAR1)
endef
VAR1 := $(shell python -c '$(PYSCRIPT)')
«custommodule» живет внутри Python Lib корневой директории проекта, и все Makefiles на верхнем уровне, которые включают Makefile.inc без ошибок.
В 'подкаталоге/Makefile', у меня есть:
include ../Makefile.inc
echo $(VAR1)
Когда я cd subdirectory && make
, я получаю сообщение об ошибке:
ImportError: No module named custommodule
Я пытался добавить путь Python в «Makefile.inc '(в блоке define PYSCRIPT
), чтобы включить родительский каталог, считая, что' subdirectory/Makefile 'выполнял' ../Makefile.inc 'в своем собственном пути по сравнению с родительским путем, но это тоже не сработало.
Я пропустил что-то, что мешает этому работать? Или есть лучший способ добиться того, что я пытаюсь?
Это не сработает: вы пытаетесь добавить назначение переменной переменной в скрипт python. – MadScientist
Не совсем. Я добавляю к скрипту python, который будет выполняться с помощью '$ (shell ...)' вызывает назначение переменной python. Расширение make произойдет, прежде чем передать скрипт на python. Если у вас есть четкие доказательства того, что он не может работать, объясните, почему. –
Несомненно, '$ (ROOTDIR)' будет расширен до запуска python. Но _assignment_ будет интерпретироваться с помощью python, а не make, потому что вы передаете весь скрипт 'python -c'. Вы просто устанавливаете переменную Python с именем 'PYTHONPATH' либо' .', либо '..', что является синтаксической ошибкой в Python и не будет делать то, что вы хотели в любом случае. Вы можете сделать это: '$ (shell PYTHONPATH = $ (ROOTDIR) python -c '$ (PYSCRIPT)')' (и вывести его из скрипта). Для получения очевидных доказательств просто запустите 'python -c 'PYTHONPATH =.'' И посмотрите, как он сработал ... – MadScientist