PEP-8:文件顶部的模块

APr*_*mer 8 python pep8

为了改善我的Python风格,我在我的一个脚本上运行了一个PEP-8样式检查器,它抱怨我不知道如何修复.脚本的序言如下:

#! /bin/env python3

import sys
import os

exe_name = os.path.basename(os.path.realpath(__file__))
bin_dir = os.path.dirname(os.path.realpath(__file__))
inst_dir = os.path.dirname(bin_dir)
sys.path.insert(0, inst_dir+'/path/to/packages')

import mypackage.mymodule
Run Code Online (Sandbox Code Playgroud)

并且样式检查器在线上抱怨import mymodule,声明它应该是文件的顶部.但在设置找到它的路径之前,我显然无法移动它.有没有一种很好的方法来实现这一点(强制要求环境变量或shell包装器不是我认为比现有代码更好的)同时尊重PEP-8建议?

Rah*_*hul 0

最好的策略是将sys.path相关代码放在单独的文件中并将其导入到工作代码文件中。

因此,我将上面的代码分成两个文件。一个被命名my_module.py,另一个被命名working_module.py

现在my_module将包含以下行

import sys
import os

exe_name = os.path.basename(os.path.realpath(__file__))
bin_dir = os.path.dirname(os.path.realpath(__file__))
inst_dir = os.path.dirname(bin_dir)
sys.path.insert(0, inst_dir+'/path/to/packages')
Run Code Online (Sandbox Code Playgroud)

并将working_module包含

import my_module
import mypackage.mymodule
Run Code Online (Sandbox Code Playgroud)

因为我们是my_module在之前导入的mypackage,所以它会执行之前与路径相关的代码,并且您的包将在路径中可用。

  • 导入不应该改变这样的功能。这是一种超级糟糕的形式,并且当您取出看似不需要的导入时,它并没有明确*为什么*您的代码会失败。 (3认同)
  • 添加另一个文件只是为了尊重风格指南对我来说似乎不是一个好主意。 (3认同)