小编典典

PEP8 –使用sys.path不在文件顶部导入

python

问题

PEP8有一个关于将导入置于文件顶部的规则:

导入总是放在文件的顶部,紧随任何模块注释和文档字符串之后,以及模块全局变量和常量之前。

但是,在某些情况下,我可能想做些类似的事情:

import sys
sys.path.insert("..", 0)

import my_module

在这种情况下,pep8命令行实用程序会标记我的代码:

E402模块级别导入不在文件顶部

通过sys.path修改达到PEP8的最佳方法是什么?

为什么

我有这段代码,因为我遵循是《The Hitchhiker’s
Guide to Python》中
给出的项目结构

该指南建议我有一个与my_module文件夹分开的tests文件夹,这两个文件夹都位于同一目录中。如果我要访问my_moduletests,我想我需要添加..sys.path


阅读 214

收藏
2021-01-20

共1个答案

小编典典

通常foo/tests,我的项目的子目录中有多个带有测试的文件,而我正在测试的模块位于中foo/src。为了从foo/tests没有导入错误的情况下运行测试,我创建了一个foo/tests/pathmagic.py看起来像这样的文件;

"""Path hack to make tests work."""

import os
import sys

bp = os.path.dirname(os.path.realpath('.')).split(os.sep)
modpath = os.sep.join(bp + ['src'])
sys.path.insert(0, modpath)

然后在每个测试文件中,使用

import pathmagic  # noqa

作为第一个导入。“ noqa”注释可防止pycodestyle/pep8抱怨未使用的导入。

2021-01-20