Python子模块自动加载器intellij完成问题

问题描述 投票:0回答:1

我做了以下自动加载器

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中正确解析模块?

python intellij-idea pycharm
1个回答
1
投票

在IDE中,我们不运行您的代码来收集运行时实际可用的属性,而且这个代码太动态,无法静态分析,而且,老实说,很少为它添加一些特殊处理。这意味着我们无法确定这些名称是否存在,更不用说正确解决它们了。

我担心处理它的唯一方法是用专门的注释来抑制所有相应的IDE警告,或者将这些名称添加到“Unresolved references”检查的白名单中(或者退回到更常规的Python导入方法) 。

© www.soinside.com 2019 - 2024. All rights reserved.