Merge pull request #2421 from return42/mod-pyenvinstall

[perf] optimize creation of the virtualenv & pyenvinstal targets
This commit is contained in:
Alexandre Flament 2020-12-27 08:27:52 +01:00 committed by GitHub
commit 48b4af1e08
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 14 deletions

View file

@ -41,7 +41,7 @@ DOT_CONFIG="${DOT_CONFIG:-${REPO_ROOT}/.config.sh}"
source_dot_config() { source_dot_config() {
if [[ ! -e "${DOT_CONFIG}" ]]; then if [[ ! -e "${DOT_CONFIG}" ]]; then
err_msg "configuration does not extsts at: ${DOT_CONFIG}" err_msg "configuration does not exists at: ${DOT_CONFIG}"
return 42 return 42
fi fi
# shellcheck disable=SC1090 # shellcheck disable=SC1090
@ -159,7 +159,7 @@ clean_stdin() {
} }
wait_key(){ wait_key(){
# usage: waitKEY [<timeout in sec>] # usage: wait_key [<timeout in sec>]
clean_stdin clean_stdin
local _t=$1 local _t=$1
@ -639,7 +639,7 @@ nginx_distro_setup() {
NGINX_DEFAULT_SERVER=/etc/nginx/nginx.conf NGINX_DEFAULT_SERVER=/etc/nginx/nginx.conf
# Including *location* directives from a dedicated config-folder into the # Including *location* directives from a dedicated config-folder into the
# server directive is, what what fedora and centos (already) does. # server directive is, what fedora and centos (already) does.
NGINX_APPS_ENABLED="/etc/nginx/default.d" NGINX_APPS_ENABLED="/etc/nginx/default.d"
# We add a apps-available folder and linking configurations into the # We add a apps-available folder and linking configurations into the
@ -692,7 +692,7 @@ nginx_reload() {
nginx_install_app() { nginx_install_app() {
# usage: nginx_install_app [<template option> ...] <myapp> # usage: nginx_install_app [<template option> ...] <myapp.conf>
# #
# <template option>: see install_template # <template option>: see install_template
@ -1381,7 +1381,7 @@ in_container() {
LXC_ENV_FOLDER= LXC_ENV_FOLDER=
if in_container; then if in_container; then
# shellcheck disable=SC2034 # shellcheck disable=SC2034
LXC_ENV_FOLDER="lxc/$(hostname)/" LXC_ENV_FOLDER="lxc-env/$(hostname)/"
fi fi
lxc_init_container_env() { lxc_init_container_env() {
@ -1413,8 +1413,8 @@ LXC_BASE_PACKAGES_centos="bash git python3"
case $DIST_ID in case $DIST_ID in
ubuntu|debian) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_debian}" ;; ubuntu|debian) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_debian}" ;;
arch) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_arch}" ;; arch) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_arch}" ;;
fedora) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_fedora}" ;; fedora) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_fedora}" ;;
centos) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_centos}" ;; centos) LXC_BASE_PACKAGES="${LXC_BASE_PACKAGES_centos}" ;;
*) err_msg "$DIST_ID-$DIST_VERS: pkg_install LXC_BASE_PACKAGES not yet implemented" ;; *) err_msg "$DIST_ID-$DIST_VERS: pkg_install LXC_BASE_PACKAGES not yet implemented" ;;
esac esac

View file

@ -5,7 +5,7 @@ PHONY += lxc-activate lxc-purge
lxc-activate: lxc-activate:
@$(MAKE) -s -f "$$(dirname $(abspath $(lastword $(MAKEFILE_LIST))))/makefile.lxc" lxc-activate @$(MAKE) -s -f "$$(dirname $(abspath $(lastword $(MAKEFILE_LIST))))/makefile.lxc" lxc-activate
lxc-purge: lxc-purge:
$(Q)rm -rf ./lxc $(Q)rm -rf ./lxc-env
else else
include /.lxcenv.mk include /.lxcenv.mk
endif endif

View file

@ -9,10 +9,10 @@
# sudo make ./utils/makefile.lxc lxc-activate # sudo make ./utils/makefile.lxc lxc-activate
# sudo make ./utils/makefile.lxc lxc-deactivate # sudo make ./utils/makefile.lxc lxc-deactivate
LXC_ENV_FOLDER=lxc/$(shell hostname)/ LXC_ENV_FOLDER=lxc-env/$(shell hostname)/
lxc-help:: lxc-help::
@echo 'LXC: running in container LXC_ENV_FOLDER=$(LXC_ENV_FOLDER)' @echo ' LXC: running in container LXC_ENV_FOLDER=$(LXC_ENV_FOLDER)'
# If not activated, serve target 'lxc-activate' .. # If not activated, serve target 'lxc-activate' ..
ifeq (,$(wildcard /.lxcenv.mk)) ifeq (,$(wildcard /.lxcenv.mk))
@ -24,6 +24,9 @@ else
PHONY += lxc-deactivate PHONY += lxc-deactivate
lxc-deactivate: lxc-deactivate:
rm /.lxcenv.mk rm /.lxcenv.mk
$(LXC_ENV_FOLDER):
$(Q)mkdir -p $(LXC_ENV_FOLDER)
$(Q)echo placeholder > $(LXC_ENV_FOLDER).placeholder
endif endif
.PHONY: $(PHONY) .PHONY: $(PHONY)

View file

@ -75,7 +75,9 @@ msg-python-exe:
https://www.python.org or install it from your package\n\ https://www.python.org or install it from your package\n\
manager. On debian based OS these requirements are\n\ manager. On debian based OS these requirements are\n\
installed by::\n\n\ installed by::\n\n\
sudo -H apt-get install $(PYTHON)\n" | $(FMT) sudo -H add-apt-repository ppa:deadsnakes/ppa\n\
sudo -H apt update\n\
sudo -H apt-get install $(PYTHON) $(PYTHON)-venv\n"
ifeq ($(shell which $(PYTHON) >/dev/null 2>&1; echo $$?), 1) ifeq ($(shell which $(PYTHON) >/dev/null 2>&1; echo $$?), 1)
python-exe: msg-python-exe python-exe: msg-python-exe
@ -95,7 +97,13 @@ quiet_cmd_pyinstall = INSTALL $2
# $2 path to folder with setup.py, this uses pip from pyenv (not OS!) # $2 path to folder with setup.py, this uses pip from pyenv (not OS!)
quiet_cmd_pyenvinstall = PYENV install $2 quiet_cmd_pyenvinstall = PYENV install $2
cmd_pyenvinstall = $(PY_ENV_BIN)/python -m pip $(PIP_VERBOSE) install -e $2$(PY_SETUP_EXTRAS) cmd_pyenvinstall = \
if ! cat $(PY_ENV)/requirements.sha256 2>/dev/null | sha256sum --check --status 2>/dev/null; then \
$(PY_ENV_BIN)/python -m pip $(PIP_VERBOSE) install -e $2$(PY_SETUP_EXTRAS) ;\
sha256sum requirements*.txt > $(PY_ENV)/requirements.sha256 ;\
else \
echo "PYENV $2 already installed"; \
fi
# Uninstall the package. Since pip does not uninstall the no longer needed # Uninstall the package. Since pip does not uninstall the no longer needed
# depencies (something like autoremove) the depencies remain. # depencies (something like autoremove) the depencies remain.
@ -113,6 +121,8 @@ quiet_cmd_virtualenv = PYENV usage: $ source ./$@/bin/activate
cmd_virtualenv = \ cmd_virtualenv = \
if [ ! -d "./$(PY_ENV)" ];then \ if [ ! -d "./$(PY_ENV)" ];then \
$(PYTHON) -m venv $(VTENV_OPTS) $2; \ $(PYTHON) -m venv $(VTENV_OPTS) $2; \
$(PY_ENV_BIN)/python -m pip install $(PIP_VERBOSE) -U pip wheel setuptools; \
$(PY_ENV_BIN)/python -m pip install $(PIP_VERBOSE) -r requirements.txt; \
else \ else \
echo "PYENV using virtualenv from $2"; \ echo "PYENV using virtualenv from $2"; \
fi fi
@ -193,8 +203,6 @@ pyclean:
pyenv: $(PY_ENV) pyenv: $(PY_ENV)
$(PY_ENV): python-exe $(PY_ENV): python-exe
$(call cmd,virtualenv,$(PY_ENV)) $(call cmd,virtualenv,$(PY_ENV))
$(Q)$(PY_ENV_BIN)/python -m pip install $(PIP_VERBOSE) -U pip wheel pip setuptools
$(Q)$(PY_ENV_BIN)/python -m pip install $(PIP_VERBOSE) -r requirements.txt
PHONY += pylint-exe PHONY += pylint-exe
pylint-exe: $(PY_ENV) pylint-exe: $(PY_ENV)