如何在昂贵的进口之前优雅地解析python中的argumens?

adr*_*rin 4 python argparse

我有一个脚本,它解析了一些参数,并且有一些昂贵的导入,但只有当用户提供有效的输入参数时才需要这些导入,否则程序退出.此外,当用户说python script.py --help,根本不需要执行那些昂贵的进口.

我能想到这样一个剧本:

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)
Run Code Online (Sandbox Code Playgroud)

这样做可以,但对我来说看起来并不优雅.对这项任务有更好的建议吗?

编辑:导入真的很贵:

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

real    0m12.257s
user    0m10.756s
sys 0m0.348s
Run Code Online (Sandbox Code Playgroud)

pil*_*lls 8

您可以有条件地或在try块中或几乎在代码中的任何位置导入.

所以你可以这样做:

import cheaplib

if __name__ == "__main__":
    args = parse_args()
    if expensive_arg in args:
        import expensivelib
    do_stuff(args)
Run Code Online (Sandbox Code Playgroud)

或者更清楚的是,只导入将使用它的函数中的lib.

def expensive_function():
    import expensivelib
    ...
Run Code Online (Sandbox Code Playgroud)