将路径添加到sys.path与PEP E402

时间:2019-05-17 10:28:07

标签: python spyder pep8

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

import sys
sys.path.append(some_module_path)

import some_module

但是,后者的导入现在违反了PEP E402(“模块级别的导入不在文件顶部”)。至少spyder告诉我。间谍在这里太挑剔了吗?

在spyder中,有一个“项目”的基本概念,我假设可以针对该项目调整环境。但是,我不知道如何修改例如sys.path取决于spyder项目。

如何在spyder项目中修改sys.path?还是有解决该问题的通用python方法?

3 个答案:

答案 0 :(得分:2)

您可以将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()

此解决方案可将您的“项目配置”很好地放在一个地方(这使得将来易于维护),并且至少符合PEP8(包括E402)和pylint规则。

答案 1 :(得分:1)

作为answer的替代解决方案,带有单独的模块(如果发现这对我来说是可行的解决方案)。

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

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

答案 2 :(得分:0)

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

您可以通过直接指定模块的路径来导入该模块,而无需使用<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css">

在Python 3中,这很简单

sys.path.append

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