zulip/scripts/lib/create-production-venv
Anders Kaseorg d282ef3e64 provision: Use uv sync --no-managed-python.
This is the default, but if we ever want to switch to uv’s managed
Python later, it will be necessary to have this earlier to stop uv
from keeping it after checking out an earlier branch.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2026-03-25 04:05:47 -07:00

37 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import os
import platform
import sys
ZULIP_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
if ZULIP_PATH not in sys.path:
sys.path.append(ZULIP_PATH)
from scripts.lib.setup_venv import get_venv_dependencies
from scripts.lib.zulip_tools import os_families, run
parser = argparse.ArgumentParser(description="Create a production virtualenv with caching")
parser.add_argument("deploy_path")
args = parser.parse_args()
# install dependencies for setting up the virtualenv
distro_info = platform.freedesktop_os_release()
vendor = distro_info["ID"]
os_version = distro_info["VERSION_ID"]
VENV_DEPENDENCIES = get_venv_dependencies(vendor, os_version)
if "debian" in os_families():
run(["apt-get", "-y", "install", "--no-install-recommends", *VENV_DEPENDENCIES])
elif "fedora" in os_families():
run(["yum", "-y", "install", *VENV_DEPENDENCIES])
else:
print("Unsupported platform: {}".format(distro_info["ID"]))
sys.exit(1)
os.chdir(ZULIP_PATH)
run(["scripts/lib/install-uv"])
run(
["uv", "sync", "--frozen", "--no-managed-python", "--only-group=prod"],
env={k: v for k, v in os.environ.items() if k not in {"PYTHONDEVMODE", "PYTHONWARNINGS"}},
)