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

问题描述 投票:0回答:4

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

import sys
sys.path.append(some_module_path)

import some_module

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

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

如何修改spyder项目中的sys.path?或者有一个通用的Python方法来解决这个问题吗?

python spyder pep8
4个回答
7
投票

您可以将

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 规则。


3
投票

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

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

如果我只使用

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


1
投票

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

您可以通过直接指定模块的路径来导入该模块,而无需使用

sys.path.append

在 Python 3 中,这就像

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

更多信息请参见:如何导入给定完整路径的模块?


0
投票

@wovano 的解决方案对我帮助很大。

但是由于我对导入警告感到恼火,所以我稍微调整了解决方案。

文件_paths.py:

import sys
import git
sys.path.append(git.Repo('.', search_parent_directories=True).working_tree_dir)

fix_import_warning = 'fix_import_warning'

在执行导入的文件中: 进口期间:

import _paths

最后:

def fix_import_warning(fix_import_warning = _paths.fix_import_warning):
    print(fix_import_warning)
© www.soinside.com 2019 - 2024. All rights reserved.