python - 使用 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。但是,知道这一点并不能解决问题。我如何投射类型。或者作为模块的填充,以便识别类和方法?
解决方案
在 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 找到它。
推荐阅读
- azure - 在 AzureRM 中将 Find-AzureRmResource 替换为 Get-AzureRmResource 以标记资源
- node.js - node.js (i18in) 中的相对 URL
- python - 使用 SciPy/NumPy 循环有限概率权重
- c# - 如何在gridview上实现onclick行选择
- java - 使用 Spring 从环境变量中获取地图属性
- c# - 双击与单击
- xamarin - Xamarin.Forms 应用程序中的 Voice Over 是否区分 Android 和 iPhone 上的启用和禁用按钮状态?
- php - PHP多维数组按条件搜索
- java - 如何在多租户系统中切换 jpa 方言以指定租户
- r - 改变由转换为符号的字符串选择的列