2014-07-14 50 views
12

我希望在處理指定的virtualenv時執行多個操作。如何在makefile中使用virtualenv

例如命令

make install 

將相當於

source path/to/virtualenv/bin/activate 
pip install -r requirements.txt 

這可能嗎?

回答

12

在讓你可以運行一個shell作爲命令。在這個shell中,你可以做所有你可以在你從comandline開始的shell中完成的任何事情。例如:

install: 
    (\ 
     source path/to/virtualenv/bin/activate; \ 
     pip install -r requirements.txt; \ 
    ) 

必須注意的;\

打開和關閉大括號之間的所有內容都將在shell的單個實例中完成。

+5

沒有必要爲''在()這種情況。使已經爲規則體中的每一行生成一個新的shell實例。您只需使用連續標記就可以讀取這些行並在單個shell中執行它們,而不是在多個shell中執行它們,這是默認情況下的做法。 –

0

您也可以使用名爲「VIRTUALENVWRAPPER_SCRIPT」的環境變量。像這樣:

install: 
    (\ 
     source $$VIRTUALENVWRAPPER_SCRIPT; \ 
     pip install -r requirements.txt; \ 
    ) 
6

我有幸運了。

install: 
    source ./path/to/bin/activate; \ 
    pip install -r requirements.txt; \ 
0

你應該使用它,它對我來說是有用的。

report.ipynb : merged.ipynb 
    (bash -c "source ${HOME}/anaconda3/bin/activate py27; which -a python; \ 
     jupyter nbconvert \ 
     --to notebook \ 
     --ExecutePreprocessor.kernel_name=python2 \ 
     --ExecutePreprocessor.timeout=3000 \ 
     --execute merged.ipynb \ 
     --output=$< $<") 
2

我喜歡用的東西,只運行時requirements.txt變化:

venv: venv/bin/activate 

venv/bin/activate: requirements.txt 
    test -d venv || virtualenv venv 
    . venv/bin/activate; pip install -Ur requirements.txt 
    touch venv/bin/activate 

test: venv 
    . venv/bin/activate; nosetests project/test 

clean: 
    rm -rf venv 
    find -iname "*.pyc" -delete