鉴于您的文件/文件夹结构:
├── Functions
│ └── functions.py
├── <main app folder>
│ └── app.py
尽管将 path/to/Functions 添加到 sys.path 后,您的导入可能会正确运行,但 Pylint 会向您发出警告,因为这不是推荐的导入方式,尤其是当您在外部导入模块时 应用程序包/文件夹。
来自PEP8 Style Guide for Imports:
建议使用绝对导入,因为它们通常更具可读性
并且往往表现得更好(或至少给出更好的错误消息)
如果导入系统配置不正确(例如当一个
包内的目录最终位于sys.path):
import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example
推荐的解决方案是在setup Functions as a package下添加一个__init__.py文件:
├── parent
│ └── Functions
│ ├── __init__.py
│ └── functions.py
然后导入您的函数,如下所示:
sys.path.append("/path/to/parent")
# option 1
from Functions import functions
functions.copy()
functions.delete()
# option2
from Functions.functions import copy, delete
copy()
delete()
两个选项都应该正确运行并满足 PyLint。
现在,如果你真的想像from functions import func 那样进行非绝对导入,并让 PyLint 接受它,我建议将 functions.py 重命名为其他名称。这是因为,在某些不区分大小写的系统上,导入 Functions 和 functions 可能会被视为同一个模块。当您告诉 PyLint 查看 /path/to/Functions(我稍后会展示)时,它可能无法区分 copy 和 delete 是 Functions 还是 functions 的一部分,它可能仍会显示导入错误。
所以,你需要做的是重命名functions.py(例如filefuncs.py):
├── Functions
│ └── filefuncs.py
├── <main app folder>
│ └── app.py
然后在您的 VS Code 工作区中,将其添加到您的 .vscode/settings.json 文件中,以告诉 PyLint 在哪里寻找 filefuncs 模块:
"python.linting.pylintArgs": [
"--init-hook",
"import sys; sys.path.append('/path/to/Functions')"
]
然后您现在可以像原始代码一样导入它,但不会出现 PyLint 错误:
sys.path.append("/path/to/Functions")
from filefuncs import copy, delete
copy()
delete()
第二种方法可以满足您的需要,但它包含一些 PyLint 工作的变通方法。如果您可以使用我在开始时解释的推荐方式,请改用它。