113 lines
3.5 KiB
Python
Executable File
113 lines
3.5 KiB
Python
Executable File
import sys
|
|
|
|
from distutils import util
|
|
from distutils import sysconfig
|
|
from distutils import log
|
|
from distutils.version import LooseVersion, StrictVersion
|
|
import glob
|
|
import os
|
|
import subprocess
|
|
import re
|
|
from distutils.errors import DistutilsError
|
|
import tempfile
|
|
|
|
from importlib.util import spec_from_file_location # @UnresolvedImport
|
|
import zipimport
|
|
|
|
import argparse
|
|
|
|
import base64
|
|
|
|
from .checkpython import is_python_version
|
|
|
|
|
|
from obidistutils.serenity.rerun import enforce_good_python
|
|
from obidistutils.serenity.rerun import rerun_with_anothe_python
|
|
|
|
from obidistutils.serenity.virtual import serenity_virtualenv
|
|
|
|
from obidistutils.serenity.checksystem import is_mac_system, \
|
|
is_windows_system
|
|
|
|
from obidistutils.serenity.checkpackage import install_requirements
|
|
from obidistutils.serenity.checkpackage import check_requirements
|
|
|
|
from obidistutils.serenity.util import save_argv
|
|
|
|
from obidistutils.serenity.snake import snake
|
|
|
|
|
|
def serenity_snake(envname,package,version):
|
|
old = log.set_threshold(log.INFO)
|
|
|
|
log.info("Installing %s (%s) in serenity mode" % (package,version))
|
|
|
|
enforce_good_python()
|
|
|
|
virtualpython=serenity_virtualenv(envname,package,version)
|
|
|
|
if virtualpython!=os.path.realpath(sys.executable):
|
|
log.info("Restarting installation within the %s virtualenv" % (envname))
|
|
rerun_with_anothe_python(virtualpython)
|
|
|
|
log.info("%s will be installed with python : %s" % (package,virtualpython))
|
|
|
|
if install_requirements():
|
|
log.info("Restarting installation with all dependencies ok")
|
|
rerun_with_anothe_python(virtualpython)
|
|
|
|
log.set_threshold(old)
|
|
|
|
def serenity_assert(version):
|
|
check_requirements()
|
|
|
|
|
|
def is_serenity():
|
|
from obidistutils.serenity.globals import local_serenity
|
|
return local_serenity and local_serenity[0]
|
|
|
|
def serenity_mode(package,version):
|
|
|
|
save_argv()
|
|
|
|
|
|
from obidistutils.serenity.globals import saved_args
|
|
from obidistutils.serenity.globals import local_serenity
|
|
|
|
|
|
old = log.set_threshold(log.INFO)
|
|
|
|
argparser = argparse.ArgumentParser(add_help=False)
|
|
argparser.add_argument('--serenity',
|
|
dest='serenity',
|
|
action='store_true',
|
|
default=False,
|
|
help='Switch the installer in serenity mode. Everythings are installed in a virtualenv')
|
|
|
|
argparser.add_argument('--virtualenv',
|
|
dest='virtual',
|
|
type=str,
|
|
action='store',
|
|
default="%s-%s" % (package,version),
|
|
help='Specify the name of the virtualenv used by the serenity mode [default: %s-%s]' % (package,version))
|
|
|
|
args, unknown = argparser.parse_known_args()
|
|
sys.argv = [sys.argv[0]] + unknown
|
|
|
|
if args.serenity:
|
|
local_serenity.append(True)
|
|
serenity_snake(args.virtual,package,version)
|
|
else:
|
|
local_serenity.append(False)
|
|
|
|
log.set_threshold(old)
|
|
|
|
return args.serenity
|
|
|
|
|
|
def getVersion(source,main,version):
|
|
path = os.path.join(source,main,'%s.py' % version)
|
|
spec = spec_from_file_location('version',path)
|
|
return spec.loader.load_module().version.strip()
|
|
|