diff --git a/check_modules.py b/check_modules.py index 15bb921..14c402a 100644 --- a/check_modules.py +++ b/check_modules.py @@ -1,4 +1,7 @@ -import imp +import subprocess as sp +import sys +import importlib + MODULES = [ 'os', @@ -7,7 +10,7 @@ 'subprocess', 'fnmatch', 'logging', - 'pylab', + 'matplotlib', 'errno', 'datetime', 'warnings', @@ -16,16 +19,53 @@ 'argparse', 'statsmodels', 'PIL', - 'astroscrappy'] + 'astroscrappy', + 'skimage'] missingModules = [] +installedModules = [] +failedToInstall = [] def is_missing(): - for m in MODULES: + for module in MODULES: try: - imp.find_module(m) + importlib.import_module(module) except ImportError: - missingModules.append(m) + missingModules.append(module) return missingModules + + +def install_packages(packages): + print(('Missing modules: ' + ', '.join(packages))) + + if 'PIL' in packages: + idx = packages.index('PIL') + packages[idx] = 'Pillow' + + if 'skimage' in packages: + idx = packages.index('skimage') + packages[idx] = 'scikit-image' + + for package in packages: + try: + if sys.version_info[0] == 2: + sp.check_call([sys.executable, '-m', 'pip', 'install', '-q', package], stderr=sp.PIPE) + else: + sp.check_call([sys.executable, '-m', 'pip', 'install', '-q', package], stderr=sp.DEVNULL) + + installedModules.append(package) + + except sp.CalledProcessError: + failedToInstall.append(package) + + if package == 'Pillow': + package = 'PIL' + + if package == 'scikit-image': + package = 'skimage' + + #globals()[package] = importlib.import_module(package) + + return installedModules, failedToInstall diff --git a/config.py b/config.py index aa4d8db..21c4ad5 100644 --- a/config.py +++ b/config.py @@ -1,3 +1,5 @@ +VERSION = '0.9.17' + params = {} # command line arguments diff --git a/gui.py b/gui.py index 6314a04..6888657 100644 --- a/gui.py +++ b/gui.py @@ -1,11 +1,10 @@ -import os import check_modules requiredModules = check_modules.is_missing() if requiredModules: - print(('Missing modules: ' + ', '.join(requiredModules))) - os.sys.exit() + check_modules.install_packages(requiredModules) +import os from datetime import datetime import threading import time diff --git a/nsdrp.py b/nsdrp.py index 666df84..f5e12d4 100644 --- a/nsdrp.py +++ b/nsdrp.py @@ -3,8 +3,13 @@ requiredModules = check_modules.is_missing() if requiredModules: - print(('Missing modules: ' + ', '.join(requiredModules))) - os.sys.exit() + installedModules, failedModules = check_modules.install_packages(requiredModules) + if installedModules: + print('Installed: ' + ', '.join(installedModules)) + if failedModules: + print(('Failed to install: ' + ', '.join(failedModules))) + print('Aborting NSDRP') + os.sys.exit() import config import nsdrp_cmnd @@ -17,7 +22,6 @@ # from DrpException import DrpException # import FlatCacher -VERSION = '0.9.17' warnings.filterwarnings('ignore', category=UserWarning, append=True) @@ -126,7 +130,7 @@ def init(out_dir, in_dir=None): if (config.params['cmnd_line_mode'] is False): setup_main_logger(logger, in_dir, out_dir) - logger.info('start nsdrp version {}'.format(VERSION)) + logger.info('start nsdrp version {}'.format(config.VERSION)) logger.info('cwd: {}'.format(os.getcwd())) logger.info('input dir: {}'.format(in_dir.rstrip('/'))) logger.info('output dir: {}'.format(out_dir.rstrip('/'))) diff --git a/products.py b/products.py index 7bb3526..7234031 100644 --- a/products.py +++ b/products.py @@ -18,7 +18,6 @@ from skimage import exposure import image_lib import config -import nsdrp warnings.filterwarnings('ignore') @@ -110,7 +109,7 @@ def gen(reduced, out_dir): # prepare extended fits header header = reduced.header - header['NSDRPVER'] = (nsdrp.VERSION, 'NSDRP Version') + header['NSDRPVER'] = (config.VERSION, 'NSDRP Version') header['COMMENT'] = ('NSDRP', 'NSDRP') if reduced.frameCalRmsRes is not None: header['WFITRMS'] = (round(reduced.frameCalRmsRes, 4), diff --git a/reduce_frame.py b/reduce_frame.py index 7533fd0..919db5e 100644 --- a/reduce_frame.py +++ b/reduce_frame.py @@ -8,7 +8,6 @@ import ReducedDataSet import reduce_order import wavelength_utils -import nsdrp import Flat from logging import INFO import Order @@ -434,7 +433,7 @@ def log_start_summary(reduced): """ # TODO: structure and format this like nsdrp_cmnd.write_summary() - logger.info('nsdrp version {}'.format(nsdrp.VERSION)) + logger.info('nsdrp version {}'.format(config.VERSION)) loggers = ['obj'] if config.params['cmnd_line_mode'] is False: