#!/bin/bash # # Usage: # source activate.sh # # Required: # 1) ./.venv (Python venv) # # Must be sourced if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then echo "ERROR: Please source this script: source activate.sh" >&2 exit 1 fi PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 1) venv (required) VENV_ACTIVATE="${PROJECT_ROOT}/.venv/bin/activate" if [[ -f "${VENV_ACTIVATE}" ]]; then # shellcheck disable=SC1090 source "${VENV_ACTIVATE}" ENV_KIND="venv" else echo "ERROR: No .venv found at ${VENV_ACTIVATE}" >&2 echo " - Create venv: ./scripts/create_venv.sh" >&2 return 1 fi # 如果需要加载 .env 中的环境变量 ENV_FILE="${PROJECT_ROOT}/.env" if [ -f "${ENV_FILE}" ]; then while IFS= read -r line || [ -n "${line}" ]; do line="${line%$'\r'}" [[ -z "${line//[[:space:]]/}" ]] && continue [[ "${line}" =~ ^[[:space:]]*# ]] && continue [[ "${line}" != *=* ]] && continue key="${line%%=*}" value="${line#*=}" key="${key#"${key%%[![:space:]]*}"}" key="${key%"${key##*[![:space:]]}"}" value="${value#"${value%%[![:space:]]*}"}" if [[ ${#value} -ge 2 ]]; then first="${value:0:1}" last="${value: -1}" if [[ ("${first}" == '"' && "${last}" == '"') || ("${first}" == "'" && "${last}" == "'") ]]; then value="${value:1:${#value}-2}" fi fi export "${key}=${value}" done < "${ENV_FILE}" fi echo "Environment activated (${ENV_KIND}): ${VIRTUAL_ENV:-${CONDA_DEFAULT_ENV:-unknown}}"