How can I import a python module function dynamically?

后端 未结 4 1828
春和景丽
春和景丽 2021-02-01 18:31

Assuming my_function() is located in my_apps.views I would like to import my_function dynamically without using something like exec or

4条回答
  •  青春惊慌失措
    2021-02-01 19:16

    you want

    my_function = getattr(__import__('my_apps.views'), 'my_function')
    

    If you happen to know the name of the function at compile time, you can shorten this to

    my_function = __import__('my_apps.views').my_function
    

    This will load my_apps.views and then assign its my_function attribute to the local my_function.

    If you are sure that you only want one function, than this is acceptable. If you want more than one attribute, you can do:

    views = __import__('my_apps.views')
    my_function = getattr(views, 'my_function')
    my_other_function = getattr(views, 'my_other_function')
    my_attribute = getattr(views, 'my_attribute')
    

    as it is more readable and saves you some calls to __import__. again, if you know the names, the code can be shortened as above.

    You could also do this with tools from the imp module but it's more complicated.

提交回复
热议问题