我做了以下自动加载器
from os import listdir
from os.path import dirname
from importlib import import_module
def replace(dst: dict, src: dict):
dst.clear()
dst.update(src)
replace(globals(), {
module: getattr(import_module('.' + module, __package__), module)
for module in [
file.rstrip('.py')
for file in listdir(dirname(__file__))
if not file.startswith('__') and file.endswith('.py')
]
})
从结构化目录简化加载,如:
mod/
__init__.py (see above)
foo.py
goo.py
....py
所以我不必写丑陋的代码
from mod.foo import foo
但我可以这样做
from mod import foo
不幸的是,IntelliJ IDEA社区无法处理它并将foo识别为模块。
如何在此IDE中正确解析模块?
在IDE中,我们不运行您的代码来收集运行时实际可用的属性,而且这个代码太动态,无法静态分析,而且,老实说,很少为它添加一些特殊处理。这意味着我们无法确定这些名称是否存在,更不用说正确解决它们了。
我担心处理它的唯一方法是用专门的注释来抑制所有相应的IDE警告,或者将这些名称添加到“Unresolved references”检查的白名单中(或者退回到更常规的Python导入方法) 。