diff --git a/fsl/utils/fslsub.py b/fsl/utils/fslsub.py index 0350eb006a189bd03a836ac1a4cf2e344f3a5d79..aacee66e913b3d03282ab0e8a7e568b9c97a24e8 100644 --- a/fsl/utils/fslsub.py +++ b/fsl/utils/fslsub.py @@ -41,7 +41,7 @@ from io import BytesIO import os.path as op import glob import time -import pickle +import dill import sys import tempfile import logging @@ -455,23 +455,12 @@ def hold(job_ids, hold_filename=None): _external_job = ("""#!{} # This is a temporary file designed to run the python function {}, # so that it can be submitted to the cluster -import pickle +import dill from io import BytesIO from importlib import import_module {} -pickle_bytes = BytesIO({}) -name_type, name, func_name, args, kwargs = pickle.load(pickle_bytes) - -if name_type == 'module': - # retrieves a function defined in an external module - func = getattr(import_module(name), func_name) -elif name_type == 'script': - # retrieves a function defined in the __main__ script - local_execute = {{'__name__': '__not_main__', '__file__': name}} - exec(open(name, 'r').read(), local_execute) - func = local_execute[func_name] -else: - raise ValueError('Unknown name_type: %r' % name_type) +dill_bytes = BytesIO({}) +func, args, kwargs = dill.load(dill_bytes) {} @@ -504,13 +493,8 @@ def func_to_cmd(func, args=None, kwargs=None, tmp_dir=None, clean="never", verbo args = () if kwargs is None: kwargs = {} - pickle_bytes = BytesIO() - if func.__module__ == '__main__': - pickle.dump(('script', importlib.import_module('__main__').__file__, func.__name__, - args, kwargs), pickle_bytes) - else: - pickle.dump(('module', func.__module__, func.__name__, - args, kwargs), pickle_bytes) + dill_bytes = BytesIO() + dill.dump((func, args, kwargs), dill_bytes) handle, filename = tempfile.mkstemp(prefix=func.__name__ + '_', suffix='.py', @@ -531,7 +515,7 @@ import os; os.remove("{filename}")""" python_cmd = _external_job.format(sys.executable, func.__name__, verbose_script, - pickle_bytes.getvalue(), + dill_bytes.getvalue(), run_script) with open(filename, 'w') as python_file: diff --git a/requirements.txt b/requirements.txt index 3da17371edbd4bce009bcd28962655ada72c16f5..d4f1b242fece5d04915f285f58fe92e39bf87ef8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ h5py>=2.9 nibabel>=2.4 numpy>=1 scipy>=0.18 +dill