0
我正在使用Makefiles進行Python項目。我需要在每個Makefile中包含一些Python配置變量,並且Makefiles可以駐留在項目根目錄下的各個子目錄中(儘管深度不超過一層)。包含用於執行包含的Makefile的路徑
在項目的根,我創建了一個Makefile.inc用,例如,以下內容:
define PYSCRIPT
from lib.custommodule import VAR1
print(VAR1)
endef
VAR1 := $(shell python -c '$(PYSCRIPT)')
'custommodule的生活該項目的Python的lib目錄內的根,和所有的Makefile文件在包含Makefile.inc的頂層,執行沒有錯誤。
在 '子目錄/ Makefile文件',我有:
include ../Makefile.inc
echo $(VAR1)
當我cd subdirectory && make
,我收到錯誤:
ImportError: No module named custommodule
我試圖在「Makefile.inc前面加上Python路徑'(在define PYSCRIPT
塊中)包含父目錄,認爲'子目錄/ Makefile'在它自己的路徑中對其父路徑執行'../Makefile.inc',但這也不起作用。
我是否錯過了防止這種情況發生的東西?還是有更好的方法來實現我想要的?
這不會起作用:您正試圖將一個make變量賦值添加到python腳本中。 – MadScientist
不完全。我添加到由$'(shell ...)'調用python變量賦值執行的python腳本中。 make擴展將在將腳本傳遞給python之前進行。如果您有明確的證據表明它無法正常工作,請解釋原因。 –
當然,'$(ROOTDIR)'將在python被調用之前展開。但是_assignment_將被python解釋,而不是make,因爲你將整個腳本傳遞給'python -c'。你只是將名爲'PYTHONPATH'的Python變量設置爲'.'或'..',這是Python中的語法錯誤,無論如何不會做你想要的。你可以這樣做:'(shell PYTHONPATH = $(ROOTDIR)python -c'$(PYSCRIPT)')'(並將其從腳本中取出)。要獲得明確的證據,只需運行'python -c'PYTHONPATH =。''然後看它失敗... – MadScientist