添加路径 sys.path vs. PEP E402

Add path to sys.path vs. PEP E402

为了导入位于磁盘某处的项目特定模块,可以轻松地将此目录附加到 sys.path:

import sys
sys.path.append(some_module_path)

import some_module

但是,后者的导入现在违反了 PEP E402 ("module level import not at top of file")。至少 spyder 是这样告诉我的。这里的spyder是不是太挑剔了?

在 spyder 中有一个 "project" 的主要思想,我假设环境可以针对这个项目进行调整。但是,我不知道如何修改例如sys.path 取决于 spyder 项目。

如何修改spyder项目中的sys.path?或者是否有解决此问题的通用 python 方法?

我知道这不能回答问题,但它可能是有用的信息。

您可以通过直接指定其路径来导入该模块,而无需使用 sys.path.append

在 Python 3 中,这与

一样简单
import imp
some_module = imp.load_source('some_module', '/path/to/some_module.py')

这里有更多信息:How to import a module given the full path?

您可以将 sys.path 扩展放在单独的模块中,例如_paths.py.

_paths.py 的内容:

import sys

sys.path.append(some_module_path)
sys.path.append(some_other_module_path)
# ...and so on...

然后在您的主应用程序中:

import sys

import _paths
import some_module

some_module.some_func()

此解决方案将您的 "project configuration" 很好地放在一个地方(便于将来维护),并且至少符合 PEP8(包括 E402)和 pylint 规则。

作为 的替代解决方案,如果发现这对我来说是可行的解决方案,则使用单独的模块。

try:
    sys.path.append(Path(__file__).parent.parent)
except IndexError:
    pass

如果我只使用 sys.path.append(...),我会收到警告,但使用 try-catch 块不会产生警告。