2014-07-14 20 views
12

Desidero eseguire diverse operazioni mentre si lavora su una virtualenv specificata.Come utilizzare virtualenv in makefile

Ad esempio del comando

make install 

sarebbe equivalente a

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

E 'possibile?

risposta

12

In make è possibile eseguire una shell come comando. In questa shell puoi fare tutto ciò che puoi fare in una shell che hai iniziato da comandline. Esempio:

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

attenzione deve essere rivolta alla ; e la \.

Tutto tra la parentesi aperta e quella chiusa verrà eseguito in una singola istanza di una shell.

+5

Non c'è bisogno per il '()' in questo caso. make genera già una nuova istanza di shell per ogni riga nel corpo di una regola. Hai solo bisogno di usare i marcatori di continuazione per fare leggere le righe ed eseguirle in una singola shell invece che in più shell come per impostazione predefinita. –

0

È inoltre possibile utilizzare la variabile di ambiente denominata "VIRTUALENVWRAPPER_SCRIPT". Così:

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

Ho avuto fortuna con questo.

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

Si dovrebbe usare questo, è funzionale per me al momento.

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

Mi piace usare qualcosa che viene eseguito solo quando requirements.txt modifiche:

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