PEP-8:文件顶部的模块

时间:2017-04-03 15:41:16

标签: 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

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

3 个答案:

答案 0 :(得分:1)

如果您想避免使用路径操作,则可以使用未知的.pth功能来执行此操作。

sys.path应该以包含主程序的目录开头,可以是名称,也可以是引用作为''。我假设导入mymodule的文件不属于mypackage,因此''输入对导入mymodule没有用。

sys.path应该以执行二进制文件的site-packages目录结尾。这是添加包的正常位置。如果您不想将mypackage移至site-packages,则可以将后者扩展为mystuff.pth。在其中放入一个mypackage文件。它应该包含一行:包含 myprojects的目录的路径。称之为mypackage。然后myprojectssite-packages中的任何其他包都可以导入,就像它们位于F:/python中一样。

.pth文件的一个优点是您可以将相同的副本放在多个site-packages目录中。例如,我在python.pth中有多个项目。我安装了多个版本的Python。所以我将$("input[type=number]").keypress(function (e) { var el = $(this); var currentValue = el.val(); var char = String.fromCharCode(e.keyCode || e.which); if (currentValue.length === 3) { el.val(currentValue + char); e.preventDefault(); el.next().focus(); } else if (currentValue.length >= 4) { e.preventDefault(); } })包含在每个网站包中的那一行。

答案 1 :(得分: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')

working_module将包含

import my_module
import mypackage.mymodule

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

答案 2 :(得分:-1)

您可以使用importlib模块(python 3.5)或imp为python 2.7以编程方式加载mypackage.mymodule。两者都有相同的目的:

  

用于实现import语句的机制

这个问题可能对您有所帮助: How to import a module given the full path?

https://docs.python.org/3/library/importlib.html#examples

https://docs.python.org/2/library/imp.html