Closed
Description
@jamescooke wanted to provide you with an updated copy of my makefile (for your use or others). ref
The modifications I've made allow one to compile requirements.txt files (specifically base.txt
and test.txt
in this case) so that they can be pip-installed from the project's root directory.
Like your structure, I have my req files in $PROJECT_ROOT/requirements/{*.in,*.txt}
. However, these modifications are helpful so that I can:
- push my code to repo shared by a team, and
- use
tox
to install my requirements for me.
# From James Cooke's blog:
# "A successful pip-tools workflow for managing Python package requirements"
# http://jamescooke.info/a-successful-pip-tools-workflow-for-managing-python-package-requirements.html
.PHONY: all check clean
RELATIVE_PROJECT_ROOT = .. # relative path to project's root
PROJECT_ROOT = $(shell realpath $(RELATIVE_PROJECT_ROOT))
REQUIREMENTS_ROOT = $(shell realpath --relative-to $(PROJECT_ROOT) .)
objects = $(wildcard *.in)
outputs := $(objects:.in=.txt)
all: $(outputs)
%.txt: %.in
@pushd $(PROJECT_ROOT) > /dev/null; \
pip-compile --output-file $(REQUIREMENTS_ROOT)/$@ $(REQUIREMENTS_ROOT)/$<; \
popd > /dev/null; \
sed -i '' "s|file://$(PROJECT_ROOT)|.|" $@
test.txt: base.txt
check:
@which pip-compile > /dev/null
clean: check
- rm *.txt