6

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

"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- 行也没有效果。

4

3 回答 3

5

两件事情。一,将__init__.py文件添加到所有子目录以使它们成为正确的包。

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

于 2020-04-15T22:59:50.543 回答
5

我找到了一个很好的解决方法来解决这个答案的问题。它指向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作为替代 linter 的人VS-Code

我在这里发现的类似解决方法(与上述有关pylint)工作正常(附加到导入语句),我在这个问题中也提到过:# type: ignore

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

很可能它与settings.json- 文件有关VS-Code,因为 usingVS-Code是这里的常数因素。

于 2020-04-23T09:31:43.020 回答
0

另一个答案(受@andreas-l 启发):

在我受影响的项目的 .pylintrc 中(问题是如何以及何时开始的,我不知道0),我找到了以下“消息控制”部分并在其中添加了“导入错误”:

[MESSAGES CONTROL]

  disable=
    missing-docstring
    import-error

重新启动 VSCode 并没有更多的错误错误消息。

于 2021-10-15T17:47:32.027 回答