VS代码pylint(导入错误)从定制目录“无法导入”子子模块

时间:2020-04-14 09:07:24

标签: python visual-studio-code importerror pylint pylintrc

我在几个子目录树中组织了自己的Python脚本, 从父目录“脚本”开始,该目录已包含在settings-json中的"python.autoComplete.extraPaths"中:

"python.autoComplete.extraPaths": ["/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts",
                                       "/home/andylu/anaconda3/lib/python3.7/site-packages"]

除此之外,我还包括一个Python环境文件:

"python.envFile": "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Visual_studio_code/vscode_own_scripts.env"

其中包含一行

export PYTHONPATH=/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts:/home/andylu/anaconda3/lib/python3.7/site-packages

所有这些都很好地完成了,之前,我的所有脚本仅在 1个单个目录级别上分发,就像这样:

+---Scripts
|   +---General
|   |   +---script_one.py
|   |   +---script_two.py

当我在任何python脚本中导入例如script_one.py, 我以

开始脚本
import sys
sys.path.append(
    "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/"
)

import General.script_one as one

并且pylint正确地正确识别了此导入的脚本 上述VS Code pylint(import-error)


现在,情况有所不同。脚本已经变得如此之多,以至于我将子文件夹General拆分为包含另一个子目录级别为了使脚本更加清晰明了:

+---Scripts
|   +---General
|   |   +---Plotting
|   |   |   +---script_one.py
|   |   |   +---script_two.py
|   |   +---Misc
|   |   |   +---script_three.py
|   |   |   +---script_four.py
....

使用以下命令启动Python脚本时在以下几行中,我为以下每个导入获取了VS Code pylint(import-error)

# Package importing

import sys
sys.path.append(
    "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/"
)

import General.Plotting.auxiliary_plotting_functions as aux_plot
import General.Plotting.plotting as plot

#%%
# TIME MEASUREMENT for the entire code/function
import General.Misc.timing

我不知道为什么pylint突然停止识别导入,只是因为我添加了一个附加的子目录级别。我希望这些无意义的pylint导入错误消失,因为有效地在执行代码时正确地导入了子子模型。

我什至尝试修改.pylintrc-文件,该文件位于 /home/andylu/anaconda3/pkgs/pylint-2.3.1-py37_0/lib/python3.7/site-packages/pylint/test/regrtest_data/.pylintrc

[MASTER]

optimize-ast=no

init-hook='import sys; sys.path.append("/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts")'

添加init-hook-行也无效。

2 个答案:

答案 0 :(得分:3)

我找到了解决this answer问题的好方法。 它指向message control part of the pylint-docs

实际上,我只需要在自定义导入后面添加评论# pylint: disable=import-error,如下所示:

import General.Plotting.auxiliary_plotting_functions as aux_plot  # pylint: disable=import-error

这完美地解决了我的问题,因为老实说,我没有通过配置例如.pylintrc文件,更不用说涉及PYTHONPATH和环境文件等的所有尝试了。

简单地说,在VS Code中执行脚本时,我的自定义模块可以正确导入,但是唯一令人讨厌的细节是pylint没有得到它,并向我展示了无用的导入错误。现在,pylint不再显示这种废话了,这就是我想要的:)

我相信可能会有一个更优雅的解决方案,但是到目前为止,上述解决方法都派上了用场。如果有人想出“更好”的解决方案,只需将其发布在这里,我将答案改为您的解决方案。


PS (对于在VS-Code中使用pylance作为备用棉绒的人:

一种类似的解决方法(与上述有关pylint的解决方法)我发现here很好(将# type: ignore附加到导入语句),我在{{3} }:

import General.Misc.general_tools as tools  # type: ignore

最有可能与settings.json-VS-Code的文件有关,因为在这里使用VS-Code是不变的因素。

答案 1 :(得分:2)

两件事。首先,将__init__.py文件添加到所有子目录中,以使其成为正确的软件包。

第二,您不需要直接添加site-packages目录。如果您使用的是Python环境,则需要确保从扩展程序中选择它。