VS Code pylint(导入错误)“无法导入”来自自定义目录的子子模块

安德烈亚斯·L。

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

"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中导入时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-行也无效。

安德烈亚斯·L。

对于此答案,我发现了一个很好的解决方法它指向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使用的那些pylance作为替代棉绒VS-Code

pylint我在这里发现的类似解决方法(与上述关于有关,也可以很好地工作(附加# type: ignore到import语句),我也在此问题中提到

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章