2015-02-24 58 views
0

我正嘗試創建一個生成的Makefile。有沒有辦法測試一個python模塊是否存在,然後在Makefile中根據它執行不同的操作?通過在Makefile中導入來測試python模塊

我已經試過這樣的事情

all: 

ifeq (,$(@ python -c 'import somemodule'))                                                   
echo "DEF MODULE = 1" > settings.pxi                                                  
else                                                             
echo "DEF MODULE = 0" > settings.pxi                                                  
endif                                                             
    python setup.py build_ext --build-lib . --build-temp build --pyrex-c-in-temp 

但這樣做不會產生任何結果。另外如果模塊不存在,python會拋出一個錯誤 - 如何存儲這些信息而不是簡單地崩潰?

+0

你需要嘗試/抓住python代碼的主體,讓python不會爆炸你我認爲。手動運行該代碼是否會生成輸出? – 2015-02-24 20:41:41

+0

你在這裏寫的東西不是一個有效的makefile;如果你嘗試運行make,你會得到一個錯誤(_missing separator_)。 Makefiles不是shell腳本。 – MadScientist 2015-02-24 20:58:33

+0

編輯顯示實際的生成文件 – atma 2015-02-24 21:29:26

回答

0

考慮使用Python的imp模塊。具體來說,imp.find_module應該是你正在尋找的。

+0

我認爲這與使用'import somemodule'測試導入相同的問題,因爲它也會當找不到模塊時拋出錯誤。 – atma 2015-02-24 21:37:02

+0

你已經注意到你不能在命令行中使用try/catch,所以你需要一個模塊來實現這個功能,模塊名稱作爲參數傳入。這將是一個字符串,但是你不能在字符串中使用'import'。這就是'imp.find_module'變得有用的地方。 – Ken 2015-02-24 21:44:47