VS Code pylint(导入错误)"Unable to import" 来自自定义目录的子子模块
VS Code pylint(import-error) "Unable to import" subsub-module from custom directory
我已将自己编写的 Python 脚本组织在包含多个子目录的树中,
从父目录 "Scripts" 开始,它已经包含在设置中的 "python.autoComplete.extraPaths"
中-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_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
- 行也没有效果。
两件事。第一,将 __init__.py
个文件添加到您的所有子目录中,使它们成为合适的包。
二,应该不需要直接添加site-packages
目录。如果那是您正在使用的 Python 环境,那么您需要确保从扩展中 select 它。
我找到了解决 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 不再显示这种废话了,这就是我想要的:)
我确信可能有更优雅的解决方案,但到目前为止,上述解决方法派上了用场。如果有人提出“更好”的解决方案,请 post 在这里,我会把答案改成你的。
PS 对于那些在 VS-Code
中使用 pylance 作为替代 linter 的人:
我也发现了 here works fine (appending # type: ignore
to the import-statement), which I mentioned in this question 类似的解决方法(针对上述 pylint
):
import General.Misc.general_tools as tools # type: ignore
很可能它与 settings.json
- VS-Code
的文件有关,因为这里使用 VS-Code
是常数。
另一个答案(灵感来自@andreas-l):
在我受影响的项目的 .pylintrc 中(问题是如何以及何时开始的,我不知道 0),我找到了以下 'Messages Control' 部分并向其中添加了“import-error”:
[MESSAGES CONTROL]
disable=
missing-docstring
import-error
重新启动 VSCode 并且没有更多错误消息。
我已将自己编写的 Python 脚本组织在包含多个子目录的树中,
从父目录 "Scripts" 开始,它已经包含在设置中的 "python.autoComplete.extraPaths"
中-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_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
- 行也没有效果。
两件事。第一,将 __init__.py
个文件添加到您的所有子目录中,使它们成为合适的包。
二,应该不需要直接添加site-packages
目录。如果那是您正在使用的 Python 环境,那么您需要确保从扩展中 select 它。
我找到了解决 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 不再显示这种废话了,这就是我想要的:)
我确信可能有更优雅的解决方案,但到目前为止,上述解决方法派上了用场。如果有人提出“更好”的解决方案,请 post 在这里,我会把答案改成你的。
PS 对于那些在 VS-Code
中使用 pylance 作为替代 linter 的人:
我也发现了 here works fine (appending # type: ignore
to the import-statement), which I mentioned in this question 类似的解决方法(针对上述 pylint
):
import General.Misc.general_tools as tools # type: ignore
很可能它与 settings.json
- VS-Code
的文件有关,因为这里使用 VS-Code
是常数。
另一个答案(灵感来自@andreas-l):
在我受影响的项目的 .pylintrc 中(问题是如何以及何时开始的,我不知道 0),我找到了以下 'Messages Control' 部分并向其中添加了“import-error”:
[MESSAGES CONTROL]
disable=
missing-docstring
import-error
重新启动 VSCode 并且没有更多错误消息。