How to gracefully parse argumens in python before an expensive import?

I have a script that parses several arguments and has some expensive import data, but this import is only necessary if the user gives valid input arguments, otherwise the program will exit. In addition, when the user speaks python script.py --help, there is no need for these expensive import operations to be performed at all.

I can think of a script like this:

import argparse

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('--argument', type=str)
    args = parser.parse_args()
    return args

if __name__ == "__main__":
    args = parse_args()

import gensim # expensive import
import blahblahblah

def the_rest_of_the_code(args):
    pass

if __name__ == "__main__":
    the_rest_of_the_code(args)

It does the job, but it does not look elegant to me. Any best deals for this task?

EDIT : imports are really expensive:

$ time python -c "import gensim"
Using TensorFlow backend.

real    0m12.257s
user    0m10.756s
sys 0m0.348s
+4
source share
2 answers

try .

, - :

import cheaplib

if __name__ == "__main__":
    args = parse_args()
    if expensive_arg in args:
        import expensivelib
    do_stuff(args)

, lib , .

def expensive_function():
    import expensivelib
    ...
+8

, , , :

def load_gensim():
    global gensim
    import gensim

, , - main, , .

main.py:

args = check_args()
if args is not None:
    import mymodule
    mymodule.main(args)

mymodule.py:

import gensim
def main(args):
    # do work
+3

Source: https://habr.com/ru/post/1689047/


All Articles