Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sage
Path: blob/develop/build/bin/sage-venv
4052 views
#!/usr/bin/env python3
# (Actually, we invoke this script with a specific python3 determined by configure.)

# Adapted from examples in https://docs.python.org/3/library/venv.html

import venv
import sys
import argparse

parser = argparse.ArgumentParser(prog=__name__,
                                 description='Creates a virtual Python '
                                             'environment in a target directory.')
parser.add_argument('env_dir', metavar='ENV_DIR',
                    help='A directory in which to create the'
                         'virtual environment.')

parser.add_argument('--system-site-packages', default=False,
                    action='store_true', dest='system_site',
                    help='Give the virtual environment access to the '
                         'system site-packages dir.')

parser.add_argument('--clear', default=False, action='store_true',
                    dest='clear', help='Delete the contents of the '
                                       'virtual environment '
                                       'directory if it already '
                                       'exists, before virtual '
                                       'environment creation.')
parser.add_argument('--upgrade', default=False, action='store_true',
                    dest='upgrade', help='Upgrade the virtual '
                                         'environment directory to '
                                         'use this version of '
                                         'Python, assuming Python '
                                         'has been upgraded '
                                         'in-place.')

options = parser.parse_args()
if options.upgrade and options.clear:
    raise ValueError('you cannot supply --upgrade and --clear together.')


# On macOS, definitely need symlinks=True (which matches what we test in build/pkgs/spkg-configure.m4)
# or it may fail with 'dyld: Library not loaded: @executable_path/../Python3' on macOS.
b = venv.EnvBuilder(system_site_packages=options.system_site,
                    clear=options.clear,
                    upgrade=options.upgrade,
                    symlinks=True)
c = b.ensure_directories(options.env_dir)
b.setup_python(c)
b.create_configuration(c)
# We do not call setup_scripts, which would install the venv 'activate'/'deactivate' scripts.