Python导入多可选插件库:兼顾运行兼容与IDE索引的可扩展方案问询
批量可选导入Python库的优化方案
我需要导入a、b、c、d等20余个类插件库,这些库可能已安装也可能未安装,但要求脚本无论如何都能正常运行——可以把它们看作脚本使用者可能安装的插件。
显然要捕获ImportError,但如果用下面的写法:
try: import a import b import c import d except ImportError: pass
这种写法无法正常工作,因为第一个不存在的包会直接触发except分支,后续可用的包就没法被导入了。
我试过用exec实现的方案:
imports = ['import a', 'import b', 'import c', 'import d'] for import_cmd in imports: try: exec(import_cmd) except ImportError: pass
暂不考虑exec()本身不被推荐的问题,这种方式能实现预期行为,但缺点很明显:导入语句是字符串形式,IDE无法正确关联库。比如当前文件是myfile.py,在其他文件里尝试from myfile import a时,不会自动补全还可能出现语法检查错误,尽管运行时没问题;而且没法通过Ctrl+点击a跳转到对应的库,非常不方便。
能满足所有需求的是为每个导入单独写try-except,但这种写法代码丑陋、重复度高,应该有更具可扩展性的方案:
try: import a except ImportError: pass try: import b except ImportError: pass # 以此类推
我也考虑过用cog,但觉得它会增加代码的理解和维护难度——需要编写配置文件指定cog要修改的文件,还要在库安装时运行cog等。
所以,有没有更优的解决方案?
内容的提问来源于stack exchange,提问作者kevinlinxc
相关产品推荐
相关产品推荐

