#!/usr/bin/env python3 import os import argparse 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.zulip_tools import overwrite_symlink, run, parse_lsb_release from scripts.lib.setup_venv import ( setup_virtualenv, VENV_DEPENDENCIES, REDHAT_VENV_DEPENDENCIES, FEDORA_VENV_DEPENDENCIES ) 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 = parse_lsb_release() vendor = distro_info['DISTRIB_ID'] family = distro_info['DISTRIB_FAMILY'] if family == 'debian': run(["apt-get", "-y", "install"] + VENV_DEPENDENCIES) elif family == 'redhat': if vendor in ["CentOS", "RedHat"]: _VENV_DEPS = REDHAT_VENV_DEPENDENCIES elif vendor == "Fedora": _VENV_DEPS = FEDORA_VENV_DEPENDENCIES run(["yum", "-y", "install"] + _VENV_DEPS) else: print("Unsupported platform: {}".format(vendor)) sys.exit(1) python_version = sys.version_info[0] # Set the current working directory to the Zulip checkout, so the api/ # relative path in requirements/common.in works. os.chdir(ZULIP_PATH) venv_name = "zulip-py3-venv" cached_venv_path = setup_virtualenv( os.path.join(args.deploy_path, venv_name), os.path.join(ZULIP_PATH, "requirements", "prod.txt"), virtualenv_args=['-p', 'python{}'.format(python_version)]) current_venv_path = os.path.join(args.deploy_path, 'zulip-current-venv') overwrite_symlink(venv_name, current_venv_path)