Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我是否应该使用“;从包导入utils,设置;或;从…起导入UTIL、设置“;_Python - Fatal编程技术网

Python 我是否应该使用“;从包导入utils,设置;或;从…起导入UTIL、设置“;

Python 我是否应该使用“;从包导入utils,设置;或;从…起导入UTIL、设置“;,python,Python,我正在开发一个Python应用程序;它将所有代码都放在一个包中,并在这个包中运行。解释器对应用程序的Python包不感兴趣,它只是一个GUI应用程序 问题是,在应用程序包中导入模块时,首选哪种样式 from application import settings, utils 或 也就是说,我可以按原样指定名称(此处为“应用程序”),也可以使用“.”表示“当前包” 这是一个自由软件包,因此有可能有人想要对我的应用程序进行分支并更改其名称。在这种情况下,备选方案1有点麻烦。尽管如此,我一直使用样

我正在开发一个Python应用程序;它将所有代码都放在一个包中,并在这个包中运行。解释器对应用程序的Python包不感兴趣,它只是一个GUI应用程序

问题是,在应用程序包中导入模块时,首选哪种样式

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