Linux SRV-16 6.18.44-paas #1 SMP PREEMPT_DYNAMIC Thu Aug 13 10:08:12 UTC 2026 x86_64
/
proc
/
212
/
root
/
srv
/
admin
/
scripts
/
builder
/
python
/
//proc/212/root/srv/admin/scripts/builder/python/install.sh
#!/bin/bash -e new_venv() { # Starting from version 20.0.0, --version returns extra information [ "$(printf '%s\n' "20.0.0" "$(virtualenv --version | cut -d' ' -f2)" | sort -V | head -n1)" = "20.0.0" ] } remove_old_distribute() { if grep -q '^distribute==0.6.24$' requirements.txt; then echo 'WARNING: requirements.txt contains distribute==0.6.24' \ 'which is obsolete; removing it' sed -i '/^distribute==0.6.24$/d' requirements.txt fi } fix_virtualenv_location() { local builder_virtualenv_path="$builddir/local" local runtime_virtualenv_path=/srv/data/web/vhosts/default/local local py_executable="$1" [ -L "$builder_virtualenv_path/local/bin" ] && \ ln -fns ../bin "$builder_virtualenv_path/local/bin" [ -L "$builder_virtualenv_path/local/include" ] && \ ln -fns ../include "$builder_virtualenv_path/local/include" [ -L "$builder_virtualenv_path/local/lib" ] && \ ln -fns ../lib "$builder_virtualenv_path/local/lib" rm -f "$builder_virtualenv_path/bin/activate.csh" rm -f "$builder_virtualenv_path/bin/activate.fish" # --relocatable option is no longer available since version 20.0.0 of virtualenv, use recursive sed instead if new_venv; then find "$builder_virtualenv_path" -type f -exec sed -i -e "s#$builder_virtualenv_path#$runtime_virtualenv_path#" {} \; else virtualenv --python="$py_executable" --relocatable "$builder_virtualenv_path" sed -i "s#$builder_virtualenv_path#$runtime_virtualenv_path#" "$builder_virtualenv_path/bin/activate" fi } [ -z "$1" ] && exit 1 readonly builddir="$1" echo "Using Python ${WWW_VERSION}" export PATH="${PATH}:/opt/python-${WWW_VERSION}/usr/bin" export PIP_LOG="$builddir/pip.log" export PIP_BUILD_DIR="$builddir/pip-build" export PIP_SRC_DIR="$builddir/pip-src" export PY_EXECUTABLE="/opt/python-${WWW_VERSION}/usr/bin/python${WWW_VERSION}" export UV="/opt/python-${WWW_VERSION}/usr/bin/uv" export UV_CACHE_DIR="/srv/data/tmp/uv-cache" export UV_PYTHON_DOWNLOADS="never" LDFLAGS="-Wl,-rpath,/opt/python-${WWW_VERSION}/usr/lib -Wl,-rpath,/opt/sqlite-3/lib" case "${DB_ENGINE}" in mysql) LDFLAGS="${LDFLAGS} -Wl,-rpath,/opt/mysql-${DB_VERSION}/lib/x86_64-linux-gnu" ;; pgsql) LDFLAGS="${LDFLAGS} -Wl,-rpath,/opt/postgresql-${DB_VERSION}/lib" ;; esac export LDFLAGS # New build if [ -e "$UV" ]; then $UV venv --prompt='(python)' --python "$PY_EXECUTABLE" --relocatable "$builddir/local" source "$builddir/local/bin/activate" requirements="$builddir/local/requirements.txt" # Force uv python version to the one used by the PAAS. echo "$WWW_VERSION" > .python-version # Install dependencies from the first file found # requirements.txt takes precedence because: # - it's compatible with old build method # - it can be used alongide pyproject.toml or setup.py as a lock file # (https://docs.astral.sh/uv/pip/compile/#locking-requirements) for file in requirements.txt uv.lock do [ ! -f $file ] && continue if [ "$file" == "requirements.txt" ] && [ -f "uv.lock" ]; then echo "===========================================================================================" echo "Your project provides uv.lock and requirements.txt files." echo "uv.lock is now supported but for backward compatibility requirements.txt will be used." echo "Remove the requirements.txt file from your project to use dependencies of the uv.lock file." echo "===========================================================================================" fi # Provide the resolved dependencies file so that the customer can inspect it. # In case of lock files we just output them to requirements.txt format. case "$file" in uv.lock) $UV export --python "$PY_EXECUTABLE" --no-dev --no-editable --no-emit-project --format requirements-txt > "$requirements" ;; *) echo "Resolving dependencies from $file..." $UV pip compile $file -o "$requirements" ;; esac echo "Installing dependencies..." $UV pip install --compile-bytecode -r "$requirements" break done # Removes all unused cache entries $UV cache prune || true deactivate # Legacy build else virtualenv --python="$PY_EXECUTABLE" \ --prompt='(python)' \ --never-download \ "$builddir/local" source "$builddir/local/bin/activate" if [ -f requirements.txt ]; then remove_old_distribute pip install -r requirements.txt fi # Note: This can't work as the app package will be an egg link to the build path # which won't exists anymore once the build is copied in the vhost path if [ -f setup.py ]; then python setup.py develop fi deactivate fix_virtualenv_location "$PY_EXECUTABLE" fi