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

新手上路,请多包涵

问题

PEP8 有一条关于将导入放在文件顶部的规则:

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

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

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

import my_module

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

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

实现 PEP8 符合 sys.path 修改的最佳方法是什么?

为什么

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

该指南建议我有一个 my_module 文件夹,与 tests 文件夹分开,两者都在同一目录中。 If I want to access my_module from tests , I think I need to add .. to the sys.path

原文由 Luke Taylor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 735
2 个回答

通常,我的项目的子目录 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 抱怨未使用的导入。

原文由 Roland Smith 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果只有少量导入,您可以忽略这些 import 行上的 PEP8:

 import sys
sys.path.insert("..", 0)
import my_module  # noqa: E402

原文由 astorga 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题