Я хочу выполнить несколько операций при работе с указанным virtualenv.
Например команда
make install
будет эквивалентно
source path/to/virtualenv/bin/activate
pip install -r requirements.txt
Возможно ли это?
Я хочу выполнить несколько операций при работе с указанным virtualenv.
Например команда
make install
будет эквивалентно
source path/to/virtualenv/bin/activate
pip install -r requirements.txt
Возможно ли это?
В make вы можете запустить команду shell как команду. В этой оболочке вы можете делать все, что можете, в оболочке, которую вы начали с comandline. Пример:
install:
( \
source path/to/virtualenv/bin/activate; \
pip install -r requirements.txt; \
)
Внимание должно быть уделено ;
и \
.
Все между открытой и закрывающей скобками будет выполняться в одном экземпляре оболочки.
Мне нравится использовать то, что работает только когда 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
Мне повезло с этим.
install:
source ./path/to/bin/activate; \
pip install -r requirements.txt; \
Вы также можете использовать переменную окружения, называемую "VIRTUALENVWRAPPER_SCRIPT". Вот так:
install:
( \
source $$VIRTUALENVWRAPPER_SCRIPT; \
pip install -r requirements.txt; \
)
Обычно make
запускает каждую команду в рецепте в другой подоболочке. Однако установка .ONESHELL:
запустит все команды в рецепте в одной и той же подоболочке, что позволит вам активировать virtualenv и затем запускать команды внутри него.
Обратите внимание, что .ONESHELL:
применяется ко всему Makefile, а не только к одному рецепту. Это может изменить поведение существующих команд, подробности о возможных ошибках в полной документации. Это не позволит вам активировать virtualenv для использования вне Makefile, так как команды все еще выполняются внутри подоболочки.
Справочная документация: https://www.gnu.org/software/make/manual/html_node/One-Shell.html.
Пример:
.ONESHELL:
.PHONY: install
install:
source path/to/virtualenv/bin/activate
pip install -r requirements.txt
Это альтернативный способ запуска вещей, которые вы хотите запустить в virtualenv.
BIN=venv/bin/
install:
$(BIN)pip install -r requirements.txt
run:
$(BIN)python main.py
PS: это не активирует virtualenv, но делает дело. Надеюсь, вы найдете его чистым и полезным.
Вы должны использовать это, это функционально для меня в данный момент.
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=$< $<" )