@ -30,8 +30,81 @@ except ImportError:
from distutils . command . build_scripts import build_scripts as BuildScripts
from distutils . command . sdist import sdist as SDist
sys . path . insert ( 0 , os . path . abspath ( ' lib ' ) )
from ansible . release import __version__ , __author__
def find_package_info ( * file_paths ) :
try :
with open ( os . path . join ( * file_paths ) , ' r ' ) as f :
info_file = f . read ( )
except Exception :
raise RuntimeError ( " Unable to find package info. " )
# The version line must have the form
# __version__ = 'ver'
version_match = re . search ( r " ^__version__ = [ ' \" ]([^ ' \" ]*)[ ' \" ] " ,
info_file , re . M )
author_match = re . search ( r " ^__author__ = [ ' \" ]([^ ' \" ]*)[ ' \" ] " ,
info_file , re . M )
if version_match and author_match :
return version_match . group ( 1 ) , author_match . group ( 1 )
raise RuntimeError ( " Unable to find package info. " )
def _validate_install_ansible_base ( ) :
""" Validate that we can install ansible-base. Currently this only
cares about upgrading to ansible - base from ansible < 2.10
"""
if os . getenv ( ' ANSIBLE_SKIP_CONFLICT_CHECK ' , ' ' ) not in ( ' ' , ' 0 ' ) :
return
# Save these for later restoring things to pre invocation
sys_modules = sys . modules . copy ( )
sys_modules_keys = set ( sys_modules )
# Make sure `lib` isn't in `sys.path` that could confuse this
sys_path = sys . path [ : ]
abspath = os . path . abspath
sys . path [ : ] = [ p for p in sys . path if abspath ( p ) != abspath ( ' lib ' ) ]
try :
from ansible . release import __version__
except ImportError :
pass
else :
version_tuple = tuple ( int ( v ) for v in __version__ . split ( ' . ' ) [ : 2 ] )
if version_tuple < ( 2 , 10 ) :
stars = ' * ' * 76
raise RuntimeError (
'''
% s
Cannot install ansible - base with a pre - existing ansible == % s
installation .
Installing ansible - base with ansible - 2.9 or older currently installed with
pip is known to cause problems . Please uninstall ansible and install the new
version :
pip uninstall ansible
pip install ansible - base
If you want to skip the conflict checks and manually resolve any issues
afterwards , set the ANSIBLE_SKIP_CONFLICT_CHECK environment variable :
ANSIBLE_SKIP_CONFLICT_CHECK = 1 pip install ansible - base
% s
''' % (stars, __version__, stars)
)
finally :
sys . path [ : ] = sys_path
for key in sys_modules_keys . symmetric_difference ( sys . modules ) :
sys . modules . pop ( key , None )
sys . modules . update ( sys_modules )
_validate_install_ansible_base ( )
SYMLINK_CACHE = ' SYMLINK_CACHE.json '
@ -254,6 +327,8 @@ def get_dynamic_setup_params():
}
here = os . path . abspath ( os . path . dirname ( __file__ ) )
__version__ , __author__ = find_package_info ( here , ' lib ' , ' ansible ' , ' release.py ' )
static_setup_params = dict (
# Use the distutils SDist so that symlinks are not expanded
# Use a custom Build for the same reason