使用 python importlib 会导致自动完成和 lint 丢失

use python importlib causes lost autocomplete and lint

首先。一些上下文。我有一个 class 可以帮助导入多个模块,因为这将动态完成所以使用 importlib 库很重要,到目前为止一切正常。但是......自动完成功能完全丢失并且 lint 没有响应(vs-code)。

问题是:如何恢复自动完成和 lint?

示例代码如下:


# ----------- file foo.py
import typing, types, importlib

print("foo was imported!")

class foo () : 
    def __init__ ( self ) : pass
    def foo_get_doble( self, number : int ) -> int : return number*2
    def foo_print_hello_word( self ) -> None : print("hello world")


# ----------- file __init__.py
import typing, sys, importlib

if __package__ : 
    template_module = importlib.import_module( f"{__package__}.foo" )
else : 
    print( "NO PKG" )
    sys.path.append( r"C:\working_folder" )
    foo_mod = importlib.import_module( "foo" )

importlib.reload( foo_mod )
# foo_class = foo_mod.  # NO HINTS NO LINT NO TYPE CHECK NOTHING (vs-code)
foo_class = foo_mod.foo() # but its there. works.

#output
# NO PKG
# foo was imported!
# foo was imported!

导入后我的期望:

enter image description here

我得到的:

enter image description here

编辑

经过长时间的搜索。似乎 importlib 没有 return 自定义模块本身。但是一个 TypeModule 什么的。这是一种通用模块class。当我从模块中得到任何东西时,我得到这样一个 TypeAny。但是,知道这一点并不能解决问题。我如何投射类型。或者作为模块的填充,以便识别 classes 和方法?

在VS Code中,Python的Linting功能和自动补全功能由Python扩展提供。因此,建议您重新安装 python 扩展并重新加载 VS Code。

python代码分析工具的使用,以Pylint为例,请在您当前使用的python环境中安装模块“pylint”,然后运行它。

更新:

当我使用“from de.foo import fo”导入文件“foo.py”中的方法fo()时,“class_foo.f”显示自动完成选项:

由于VS Code搜索文件时默认从当前文件的父文件夹开始,为了保证代码运行s为例,我添加了代码

import sys
sys.path.append("./")

,它将文件路径添加到系统路径以帮助 VS Code 找到它。

参考:Linting in VS Code.

经过大量研究。 不可能。因为数据是在运行时创建的。所以... VSCode(或任何编辑)可以事先获得信息。只有在创建之后,执行之后才有可能。更接近的解决方案是使用 Jupyter 笔记本,但不适合大文件。