#!/usr/bin/env bash if [ -z "$1" ]; then echo "Usage: $0 [--local] [ENV_NAME]" echo " --local create .venv in the current project instead of pyenv-virtualenv" exit 1 fi LOCAL_VENV=false if [ "$1" = "--local" ]; then LOCAL_VENV=true shift fi if [ -z "$1" ]; then echo "Usage: $0 [--local] [ENV_NAME]" exit 1 fi if [ ! -f .python-version ]; then echo "Not a python project: `pwd`" exit 1 fi PY_VER=$1 PROJECT=$2 if [[ $PROJECT == "" ]]; then PROJECT=$(basename $PWD) fi echo "[*] Checking if required python version $PY_VER is installed" pyenv versions --bare | grep "^$PY_VER$" > /dev/null res=$? if [ $res -eq 1 ]; then echo "Python $PY_VER is not installed. Run \"pyenv install $PY_VER\"" exit 1 fi if [ "$LOCAL_VENV" = true ]; then echo "[*] Creating local virtualenv (.venv)" rm -rf .venv echo "$PY_VER" > .python-version "$(pyenv prefix "$PY_VER")/bin/python" -m venv .venv || exit 1 echo "[*] Updating pip, setuptools and wheel" .venv/bin/python -m pip install -U pip setuptools wheel || exit 1 if [ -f requirements.txt ]; then echo "[*] Installing packets from requirements.txt" .venv/bin/python -m pip install -Ur requirements.txt || exit 1 fi echo "[*] Local virtualenv is ready. Activate it with: source .venv/bin/activate" exit 0 fi CUR_VENV=$(cat .python-version) echo "[*] Removing current virtualenv ($CUR_VENV)" pyenv virtualenv-delete -f $CUR_VENV || true echo "[*] Removing virtualenv named as project ($PROJECT)" pyenv virtualenv-delete -f $PROJECT || true NEW_VENV=$PY_VER/envs/$PROJECT echo "[*] Creating new virtualenv ($NEW_VENV)" pyenv virtualenv $PY_VER $PROJECT || exit 1 echo $NEW_VENV > .python-version echo "[*] Updating pip, setuptools and wheel" pip install -U pip setuptools wheel || exit 1 if [ -f requirements.txt ]; then echo "[*] Installing packets from requirements.txt" pip install -Ur requirements.txt fi