69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
'''
|
|
Created on 2 oct. 2014
|
|
|
|
@author: coissac
|
|
'''
|
|
|
|
import os
|
|
import sys
|
|
import venv
|
|
|
|
from distutils.errors import DistutilsError
|
|
from .globals import local_virtualenv # @UnusedImport
|
|
from .checkpython import which_virtualenv,\
|
|
is_python_version, \
|
|
is_a_virtualenv_python
|
|
|
|
|
|
|
|
|
|
def serenity_virtualenv(envname,package,version,minversion='3.4',maxversion=None):
|
|
|
|
#
|
|
# Checks if we are already running under the good virtualenv
|
|
#
|
|
ve = which_virtualenv(full=True)
|
|
if ve == os.path.realpath(envname) and is_python_version(minversion=minversion,maxversion=maxversion):
|
|
return sys.executable
|
|
|
|
#
|
|
# Check if the virtualenv exist
|
|
#
|
|
|
|
python = None
|
|
|
|
if os.path.isdir(envname):
|
|
python = os.path.join(envname,'bin','python')
|
|
ok = (is_python_version(python,
|
|
minversion=minversion,
|
|
maxversion=maxversion) and
|
|
is_a_virtualenv_python(python))
|
|
|
|
|
|
#
|
|
# The virtualenv already exist but it is not ok
|
|
#
|
|
if not ok:
|
|
raise DistutilsError("A virtualenv %s already exists but not with the required python")
|
|
|
|
else:
|
|
ok = False
|
|
|
|
|
|
#
|
|
# Creates a new virtualenv
|
|
#
|
|
if not ok:
|
|
venv.create(envname,
|
|
system_site_packages=False,
|
|
clear=True,
|
|
symlinks=False,
|
|
with_pip=True)
|
|
|
|
# check the newly created virtualenv
|
|
return serenity_virtualenv(envname,package,version)
|
|
|
|
return os.path.realpath(python)
|
|
|
|
|
|
|