为了账号安全,请及时绑定邮箱和手机立即绑定

Python模块的绝对和显式相对导入

Python模块的绝对和显式相对导入

慕后森 2019-11-27 14:24:08
我想知道在Python应用程序中导入包的首选方法。我有一个这样的包结构:project.app1.modelsproject.app1.viewsproject.app2.modelsproject.app1.views进口project.app1.models和project.app2.models。我想到有两种方法可以做到这一点。绝对进口:import A.Aimport A.B.B或具有明确的相对导入,如在Python 2.5中使用PEP 328引入的那样:# explicit relativefrom .. import Afrom . import B什么是最pythonic的方式做到这一点?
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

绝对进口。从PEP 8:


强烈建议不要将相对进口用于包装内进口。始终对所有导入使用绝对包路径。即使现在PEP 328 [7]已在Python 2.5中完全实现,仍不鼓励使用其显式相对导入的样式。绝对导入更具可移植性,通常更具可读性。


显式相对导入是一种不错的语言功能(我想),但是它们不像绝对导入那样显式。更具可读性的形式是:


import A.A

import A.B.B

尤其是当您导入几个不同的名称空间时。如果您看一些写得很好的项目/教程,其中包括从包中导入的内容,则它们通常遵循这种风格。


您需要进行一些更明确的额外击键操作,这将在将来其他人(也许您)试图找出您的名称空间时(尤其是如果您迁移到3.x,其中包括一些软件包)节省了很多时间。名称已更改)。


查看完整回答
反对 回复 2019-11-27
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

相对导入不仅使您以后可以自由重命名程序包,而无需更改数十个内部导入,而且我在解决诸如循环导入或命名空间程序包之类的某些问题方面也取得了成功,因为它们不会将Python发送回“顶部”以从顶级名称空间重新开始搜索下一个模块。


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 649 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号