Python 我是否应该使用“;从包导入utils,设置;或;从…起导入UTIL、设置“;
我正在开发一个Python应用程序;它将所有代码都放在一个包中,并在这个包中运行。解释器对应用程序的Python包不感兴趣,它只是一个GUI应用程序 问题是,在应用程序包中导入模块时,首选哪种样式Python 我是否应该使用“;从包导入utils,设置;或;从…起导入UTIL、设置“;,python,Python,我正在开发一个Python应用程序;它将所有代码都放在一个包中,并在这个包中运行。解释器对应用程序的Python包不感兴趣,它只是一个GUI应用程序 问题是,在应用程序包中导入模块时,首选哪种样式 from application import settings, utils 或 也就是说,我可以按原样指定名称(此处为“应用程序”),也可以使用“.”表示“当前包” 这是一个自由软件包,因此有可能有人想要对我的应用程序进行分支并更改其名称。在这种情况下,备选方案1有点麻烦。尽管如此,我一直使用样
from application import settings, utils
或
也就是说,我可以按原样指定名称(此处为“应用程序”),也可以使用“.”表示“当前包”
这是一个自由软件包,因此有可能有人想要对我的应用程序进行分支并更改其名称。在这种情况下,备选方案1有点麻烦。尽管如此,我一直使用样式1(尽管早期代码在某些地方使用样式2),因为样式1看起来更好
对于我的风格(1),有没有什么我遗漏的论点?或者不使用样式2是愚蠢的吗?建议明确反对相对导入(The.style):
高度不鼓励包内导入的相对导入。
对于所有导入,始终使用绝对包路径。
即使现在PEP 328[7]已在Python 2.5中完全实现,
其显性相对进口的风格被积极劝阻;
绝对导入更便于携带,通常可读性更强
我倾向于同意。相对导入意味着同一个模块在不同的文件中以不同的方式导入,并且要求我在读写时记住所看到的内容。这并不值得,可以使用sed
进行重命名
除了重命名问题,绝对导入的唯一问题是
import foo
可能意味着顶级模块foo
或当前模块下的子模块foo
。如果这是一个问题,您可以使用来自未来导入绝对导入的from
;这在Python3中是标准的。我对绝对/相对感到困惑。我的意思是,没有两种样式,有三种:导入utils,从。导入utils,并从应用程序导入utils。我想是这样的,“这里实际上是一个绝对导入,与案例“导入x”形成对比。因此,我在上面的1和2处于同等地位。确实,对于更深层的应用程序(我的只有一个包和一个子包),有很多地方可以调用。“应用程序早期的问题是,由于我有一个名为“application.application”的模块,cPickle无法工作,但pickle会工作(不同的abs/rel导入处理)。我不得不重新命名模块,这是一个坏名字无论如何。
from . import settings, utils