我在几个子目录树中组织了自己的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
-行也无效。
答案 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环境,则需要确保从扩展程序中选择它。