Dynamic class loading in Python 2.6: RuntimeWarning: Parent module 'plugins' not found while handling absolute import

前端 未结 5 2087
不知归路
不知归路 2020-12-30 23:37

I am working on a plugin system where plugin modules are loaded like this:

def load_plugins():
   plugins=glob.glob(\"plugins/*.py\")
   instances=[]
   for         


        
5条回答
  •  粉色の甜心
    2020-12-30 23:49

    If the plugins directory does not have an __init__.py, it isn't a package, so when you create plugins.whatever, Python warns you that such a thing shouldn't really exist. (It couldn't be created by "import plugins.whatever" no matter what your path is.)

    Also,

    • Don't split on /, which is unportable. Use os.path.split.
    • Don't use .split(".py") to get the name without the extension, which is buggy. Use os.path.splitext.
    • Don't use getattr with a string literal. getattr(plugin, "__init__") is spelled plugin.__init__.
    • I am confused why you are calling a module-level __init__ function. This doesn't seem right. Perhaps you want a "set_logger" function or better, to instantiate a class that takes a logger.
    • Don't use L = L + some_other_list to extend a list, use the extend method, which has better performance and is more idiomatic.
    • Don't squash unknown exceptions by except Exception. If you cannot plan to do something sane in response to an exception, your program cannot go on sanely.

提交回复
热议问题