python包导入失败_python – 在子包中绝对导入失败,影响stdlib包名称

基本上我有一个与标准库包(“logging”)同名的子包,我希望它能够绝对导入标准库,无论我怎么运行它,但是当我进入时它会失败父包.

它看起来像是一个bug,或者是新的“绝对导入”支持的无证行为(Python 2.5中的新版本).试过2.5和2.6.

包装布局:

foo/

__init__.py

logging/

__init__.py

在foo / __ init__.py中,我们导入了自己的日志记录子包:

from __future__ import absolute_import

from . import logging as rel_logging

print 'top, relative:', rel_logging

在foo / logging / __ init__.py中,我们要导入stdlib日志包:

from __future__ import absolute_import

print 'sub, name:', __name__

import logging as abs_logging

print 'sub, absolute:', abs_logging

注意:包含foo的文件夹位于sys.path中.

从foo外部/上方导入时,输出符合预期:

c:\> python -c "import foo"

sub, name: foo.logging

sub, absolute:

top, relative:

因此,子包中的绝对导入会根据需要找到stdlib包.

但是当我们在foo文件夹中时,它的行为有所不同:

c:\foo>\python25\python -c "import foo"

sub, name: foo.logging

sub, name: logging

sub, absolute:

sub, absolute:

top, relative:

“sub,name”的双输出显示我自己的子包名为“logging”,它是第二次自我导入,即使启用了“absolute_import”,它也找不到stdlib“logging”包.

用例是我希望无论当前目录是什么,我都能够使用,测试等.将名称从“日志记录”更改为其他名称将是一种解决方法,但不是理想的,并且在任何情况下,此行为似乎都不符合绝对导入应如何工作的描述.

任何想法发生了什么,这是一个错误(我的或Python),或者这种行为是否实际上是由某些文档隐含的?

编辑:gahooa的回答清楚地显示了问题所在.一个粗略的解决方案证明了它在这里显示:

c:\foo>python -c "import sys; del sys.path[0]; import foo"

sub, name: foo.logging

sub, absolute:

top, relative:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值