首页 > 解决方案 > 使用 python importlib 导致丢失自动完成和 lint

问题描述

第一的。一些上下文。我有一个类可以帮助导入多个模块,因为这将动态完成,因此使用 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!

导入后我的期望:

在此处输入图像描述

我得到什么:

在此处输入图像描述

编辑

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

标签: pythonvisual-studio-codeautocompletepylintpython-importlib

解决方案


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

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

在此处输入图像描述

更新:

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

在此处输入图像描述

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

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

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

参考:VS Code 中的 Linting


推荐阅读