Files
decky-vaultwarden/scripts/bundle-deps.sh
T

56 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
PY_MODULES_DIR="$(dirname "$0")/../py_modules"
REQUIREMENTS="$(dirname "$0")/../requirements.txt"
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
# Detect Python version (default: 3.13)
PYTHON_VERSION="${PYTHON_VERSION:-3.11}"
ABI="cp${PYTHON_VERSION//./}"
PLATFORMS="manylinux2014_x86_64,manylinux_2_17_x86_64,linux_x86_64"
echo "==> Bundling Python dependencies for Python ${PYTHON_VERSION}"
echo "==> Requirements: ${REQUIREMENTS}"
echo "==> Output: ${PY_MODULES_DIR}"
# Clean py_modules
rm -rf "${PY_MODULES_DIR:?}"
mkdir -p "${PY_MODULES_DIR}"
# Download all dependencies (with transitive deps)
echo "==> Downloading wheels..."
pip download \
--python-version "${PYTHON_VERSION}" \
--abi "${ABI}" \
--only-binary=:all: \
--platform manylinux2014_x86_64 \
--platform manylinux_2_17_x86_64 \
--platform linux_x86_64 \
-r "${REQUIREMENTS}" \
-d "${TMPDIR}"
echo "==> Downloaded $(ls "${TMPDIR}"/*.whl 2>/dev/null | wc -l) wheels"
# Extract into py_modules
echo "==> Extracting wheels..."
for whl in "${TMPDIR}"/*.whl; do
unzip -qo "$whl" -d "${PY_MODULES_DIR}"
done
# Clean up dist-info and RECORD
echo "==> Cleaning up..."
find "${PY_MODULES_DIR}" -name "*.dist-info" -type d -exec rm -rf {} + 2>/dev/null || true
find "${PY_MODULES_DIR}" -name "*.egg-info" -type d -exec rm -rf {} + 2>/dev/null || true
find "${PY_MODULES_DIR}" -name "RECORD" -delete 2>/dev/null || true
find "${PY_MODULES_DIR}" -name "*.pyc" -delete 2>/dev/null || true
# Show results
echo "==> Bundled packages:"
ls -d "${PY_MODULES_DIR}"/*/ 2>/dev/null | xargs -I{} basename {} | sort
echo ""
SO_COUNT=$(find "${PY_MODULES_DIR}" -name "*.so" | wc -l)
echo "==> ${SO_COUNT} native extensions (.so files)"
echo "==> Done!"