PEP8有一个关于将导入置于文件顶部的规则:
导入总是放在文件的顶部,紧随任何模块注释和文档字符串之后,以及模块全局变量和常量之前。
但是,在某些情况下,我可能想做些类似的事情:
import sys sys.path.insert("..", 0) import my_module
在这种情况下,pep8命令行实用程序会标记我的代码:
pep8
E402模块级别导入不在文件顶部
通过sys.path修改达到PEP8的最佳方法是什么?
sys.path
我有这段代码,因为我遵循的是《The Hitchhiker’s Guide to Python》中给出的项目结构。
该指南建议我有一个与my_module文件夹分开的tests文件夹,这两个文件夹都位于同一目录中。如果我要访问my_module从tests,我想我需要添加..到sys.path
my_module
tests
..
通常foo/tests,我的项目的子目录中有多个带有测试的文件,而我正在测试的模块位于中foo/src。为了从foo/tests没有导入错误的情况下运行测试,我创建了一个foo/tests/pathmagic.py看起来像这样的文件;
foo/tests
foo/src
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抱怨未使用的导入。
pycodestyle