56 lines
1.7 KiB
Bash
Executable File
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!"
|