And*_* L. 5 python pylint importerror visual-studio-code pylintrc
我已经将我自己编写的 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"]
Run Code Online (Sandbox Code Playgroud)
除此之外,我还包含了一个 Python 环境文件:
"python.envFile": "/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Visual_studio_code/vscode_own_scripts.env"
Run Code Online (Sandbox Code Playgroud)
其中包含该行
export PYTHONPATH=/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts:/home/andylu/anaconda3/lib/python3.7/site-packages
Run Code Online (Sandbox Code Playgroud)
所有这些以前都很好,我所有的脚本都分布在 1 个以上的单个目录级别,如下所示:
+---Scripts
| +---General
| | +---script_one.py
| | +---script_two.py
Run Code Online (Sandbox Code Playgroud)
当我在任何 python 脚本中导入时,例如script_one.py,我用
import sys
sys.path.append(
"/home/andylu/Dokumente/Allgemeines_material/Sonstiges/Programming/Python/Scripts/"
)
import General.script_one as one
Run Code Online (Sandbox Code Playgroud)
并且 pylint 正确识别了这个导入的脚本,而不会抛出上述VS Code pylint(import-error).
现在,情况不同了。脚本变得如此之多,我将子文件夹拆分General为包含一个额外的子目录级别,以便更清晰地组织脚本:
+---Scripts
| +---General
| | +---Plotting
| | | +---script_one.py
| | | +---script_two.py
| | +---Misc
| | | +---script_three.py
| | | +---script_four.py
....
Run Code Online (Sandbox Code Playgroud)
例如,当使用以下几行启动 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
Run Code Online (Sandbox Code Playgroud)
我不知道为什么 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")'
Run Code Online (Sandbox Code Playgroud)
添加init-hook- 行也没有效果。
两件事情。一,将__init__.py文件添加到所有子目录中,使它们成为合适的包。
二,你应该不需要直接添加site-packages目录。如果这是您正在使用的 Python 环境,那么您需要确保从扩展中选择它。
我通过这个答案找到了一个很好的解决方法。它指向pylint-docs的消息控制部分。
实际上,我只需要# pylint: disable=import-error在我的自定义导入后面添加注释,如下所示:
import General.Plotting.auxiliary_plotting_functions as aux_plot # pylint: disable=import-error
Run Code Online (Sandbox Code Playgroud)
这完美地解决了我的问题,因为老实说,我没有通过配置.pylintrc文件找到一个简单的解决方案,更不用说我所有的尝试都无济于事,涉及PYTHONPATH环境文件等。
简而言之,在 VS Code 中执行脚本时,我的自定义模块被正确导入,但唯一令人讨厌的细节是 pylint 没有得到它,并向我显示了无用的导入错误。现在,pylint 不再显示这种无意义的东西,这就是我想要的:)
我确信可能有更优雅的解决方案,但到目前为止,上述解决方法派上了用场。如果有人提出了“更好”的解决方案,只需将其张贴在这里,我会将答案更改为您的。
PS对于那些使用pylance作为替代linter的人VS-Code:
pylint我在这里找到了一个类似的解决方法(与上面提到的有关)工作正常(附加# type: ignore到导入语句),我在这个问题中也提到过:
import General.Misc.general_tools as tools # type: ignore
Run Code Online (Sandbox Code Playgroud)
很可能它与 的settings.json- 文件有关VS-Code,因为 usingVS-Code是这里的常数因素。
| 归档时间: |
|
| 查看次数: |
3812 次 |
| 最近记录: |