这是我几个月前在pylance之前使用pylint遇到的类似情况:
我的python 3.9x
- 脚本(使用VS Code
on Ubuntu 20.04 LTS
)从以下自定义“工具”的导入开始:
import sys
sys.path.append(
'/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/'
)
import General.Misc.general_tools as tools
现在,Pylance
声明:
Import "General.Misc.general_tools" could not be resolvedPylance (reportMissingImports)
即使在程序执行期间模块被完美地导入,也会发生这种情况。
因此,为了确保Pylance
理解这是一个现有的模块路径,除了sys.path.append(..)
- 方法之外,我在settings.json
- 文件中添加了以下内容:
{
...
// Possible values: "Jedi", "Pylance", "Microsoft", "None".
"python.languageServer": "Pylance",
// NOTE on changing from microsoft to pylance language server: python.autoComplete.extraPaths --> python.analysis.extraPaths
// Docs: https://github.com/microsoft/pylance-release/blob/master/TROUBLESHOOTING.md#unresolved-import-warnings
"python.analysis.extraPaths": [
"/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts"
],
...
}
然而,reportMissingImports
即使它被正确导入,我仍然收到 - 消息。
我在这里找到的一种解决方法效果很好(附加# type: ignore
到导入语句):
import General.Misc.general_tools as tools # type: ignore
尽管如此,这只是一种解决方法,这就是为什么我要解决这个问题的根源。从技术上讲,这与我之前使用的相同解决方法来消除来自pylint
. 可能这是 - 配置所固有的东西VS-Code
settings.json
,因为 usingVS-Code
是这里的常数因素。
编辑未解决问题的其他措施:
我添加了
export PYTHONPATH="$PYTHONPATH:/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts"
到我的~/.bashrc
- 文件,这使我现在可以从终端直接在python
-shell 中导入模块,而无需之前的sys
-path 操作。然而,这仅适用于全局系统 python 环境,而不适用于任何虚拟环境。为了在那里更改系统路径,我按照这些说明进行操作,而我的特定虚拟环境“scrapy_course”是打开的,如下所示:
(scrapy_course) andylu@andylu-Lubuntu-PC:~/$ add2virtualenv /home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts
此命令适用于virtualenvwrapper ,它与pyenv一起巧妙地管理虚拟环境。sys.path.append(...)
现在,即使没有预先导入模块,我也可以在当前环境中运行上述脚本,但pylance
仍然无法正确识别路径并向我显示与以前相同的警告。
编辑"python.analysis.useImportHeuristic": true
:
我已经在我的全局settings.json
文件中不断地激活了这个选项,但我仍然没有注意到任何影响。一旦这种情况发生变化,或者最终(不同的)解决方案出现在我面前,我会及时通知您。
编辑抑制/禁用 Pylance 'reportMissingImports' linting-message:
我已经发现了如何完全抑制特定的 Pylance-linting-message,如果你感兴趣的话。特别是在我目前的情况下,无论如何我都需要并行使用pylint,所以我根本不依赖 Pylance 的 linter 。