Source code for pyomo.scripting.pyomo_main

#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2024
#  National Technology and Engineering Solutions of Sandia, LLC
#  Under the terms of Contract DE-NA0003525 with National Technology and
#  Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
#  rights in this software.
#  This software is distributed under the 3-clause BSD License.
#  ___________________________________________________________________________

import sys
import copy
from pyomo.common.deprecation import deprecation_warning

try:
    import pkg_resources

    pyomo_commands = pkg_resources.iter_entry_points('pyomo.command')
except:
    pyomo_commands = []
#
# Load modules associated with Plugins that are defined in
# EGG files.
#
for entrypoint in pyomo_commands:
    try:
        plugin_class = entrypoint.load()
    except Exception:
        exctype, err, tb = sys.exc_info()  # BUG?
        import traceback

        msg = (
            "Error loading pyomo.command entry point %s:\nOriginal %s: %s\n"
            "Traceback:\n%s"
            % (entrypoint, exctype.__name__, err, ''.join(traceback.format_tb(tb)))
        )
        # clear local variables to remove circular references
        exctype = err = tb = None
        # TODO: Should this just log an error and re-raise the original
        # exception?
        raise ImportError(msg)


[docs] def main(args=None): # # Load subcommands # from pyomo.scripting import pyomo_parser import pyomo.environ # # Parse the arguments # parser = pyomo_parser.get_parser() if args is None: args = copy.copy(sys.argv[1:]) # # This is a hack to convert a command-line to a 'solve' subcommand # if not args: args.append('-h') if args[0][0] == '-': if args[0] not in ['-h', '--help', '--version']: deprecation_warning( "Running the 'pyomo' script with no subcommand is deprecated. " "Defaulting to 'pyomo solve'", version='6.5.0', ) args = ['solve'] + args[0:] elif args[0] not in pyomo_parser.subparsers: deprecation_warning( "Running the 'pyomo' script with no subcommand is deprecated. " "Defaulting to 'pyomo solve'", version='6.5.0', ) args = ['solve'] + args[0:] # # Process arguments # _options, _unparsed = parser.parse_known_args(args) # # Process the results # if _options.func.__code__.co_argcount == 1: # # If the execution function only accepts one argument, then we # create an exception if there are unparsed arguments. # if len(_unparsed) > 0: # # Re-parse the command-line to create an exception # parser.parse_args(_unparsed) retval = _options.func(_options) else: retval = _options.func(_options, _unparsed) return retval
[docs] def main_console_script(): "This is the entry point for the main Pyomo script" # Note that we eat the retval data structure and only return the # process return code ans = main() try: return ans.errorcode except AttributeError: return ans
if __name__ == '__main__': sys.exit(main_console_script())