【问题标题】:What is the PEP8 style recommendation for importing local functions? [duplicate]导入本地函数的 PEP8 风格推荐是什么? [复制]
【发布时间】:2019-10-25 01:17:30
【问题描述】:

PEP8 规定您将导入放在代码的顶部,这允许 读者可以在一个空间中查看您正在导入的内容。

但是,如果您有函数的本地存储库以便导入它们,则必须首先更改当前目录。

如果您尝试更改目录,则会违反 PEP8,因为您的导入并非全部在一个地方

import sys
import pandas as pd

sys.path.insert(0, r'local\path')

from local_functions import function_1

我明白“愚蠢的一致性是小鬼怪”,如果我必须处理违反 PEP8 的行为,那也没关系。

我只是想有一个实际的解决方案,因为很多人必须编写函数并导入它们。

有没有办法导入不会违反 PEP8 的本地存储函数?

编辑: 如此处所述: https://stackoverflow.com/a/53832780/9936329

# noinspection PyUnresolvedReferences
from local_functions import function_1  # noqa: E402

会注意到您故意破坏 PEP8 并且也不会检查未解析的引用。

【问题讨论】:

  • 为什么不制作一个包并使用pip在本地安装它?这样您就不必切换 paths 或类似的东西。
  • 这会影响生产吗?如果是这样,我认为这不是一个好习惯。
  • @Nishant 您会推荐什么作为最佳做法?
  • 你一开始就不应该这样做。最简单的解决方法是使用PYTHONPATH=. python my_program.py 调用您的脚本或制作并安装本地包。

标签: python pep8 zen-of-python


【解决方案1】:

这取决于具体情况,但如果只是为了满足 linter,您可以将导入放在 try/except 块中?

import sys
import pandas as pd

try:
    from local_functions import function_1
except ModuleNotFoundError:
    sys.path.insert(0, r'local\path')
    from local_functions import function_1

或者,您可以使用相对或绝对导入,给出模块相对于项目文件夹的位置,或 HD 上的绝对路径。

【讨论】:

  • 正如你所说,这确实满足了 linter。但这似乎是一种解决方法,而不是 PEP8 试图强制执行的“好代码”。我认为那些说做一个包裹可能是最好的选择?但是又感觉不是那么干净。
  • 同意 - 或者,您可以使用相对或绝对导入,给出模块相对于项目文件夹的位置,或 HD 上的绝对路径。
猜你喜欢
  • 2011-01-02
  • 2018-02-12
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
相关资源
最近更新 更多