gpt4 book ai didi

Python 导入 AS 因绝对导入而失败

转载 作者:行者123 更新时间:2023-12-04 16:51:32 29 4
gpt4 key购买 nike

在我长期使用 python 的经验中,我遇到了一个非常奇怪的问题。

提前我想说我想知道为什么会发生这种情况 ,而不是如何更改我的代码或如何修复它,因为我也可以做到。

我正在使用 python2.7.3 并使用 __future__ absolute_import特征。
我有一个有点复杂的模块结构..我有一个模块 q.x.y.z .如果在顶部我做 import q.x.a.b它有效,但如果我这样做 import q.x.a.b as _b它没有说 q.x 没有“a”(在这个模块之前已经导入了几次)任何人都有足够的经验来知道发生了什么?
我很确定这不是循环导入问题,因为我只需要删除“as _b”并且它神奇地起作用。而且也不是命名问题,因为我对此非常小心。

文件结构如下:

q/
+ __init__.py
+ main.py #execution entry point
--- x/
+ __init__
+ a/
+ __init__
+ b.py
+ y/
+ __init__
+ z.py # import q.x.a.b

它从 q 的父文件夹运行
pkg> python q\main.py
它包含以下内容:
from __future__ import absolute_import
import sys, os

if __name__=='__main__':
sys.path[0] = os.getcwd()
import q
q.run()

与循环导入有点相关,但主要问题是 为什么当我使用“as”时会发生这种情况?

回溯是这样的:
q/main.py: q.run()
q/x/__init__.py : from q.x import a, y, k
q/x/a/__init__.py : from q.x.a import d, e, f
q/x/a/f.py : from q.x.y import z as _z
q/x/y/__init__.py : from q.x.y import g, h, z
q/x/y/h.py : import q.x.a.d as _d

这有什么关系吗?
https://stackoverflow.com/a/1835089/260242
或这个
https://stackoverflow.com/a/11309252/260242

代码示例,它实际上失败了...转到 test/q/x/y/h.py 并更改 import ... as _d 以 import ... 你会看到
http://puu.sh/16C3j

最佳答案

抱歉,无法重现,至少使用我身边的 Python 2.6.5。

请花时间隔离在干净的树中显示问题的最小案例。我将从您当前树的副本开始,修剪任何不相关的目录并删除函数定义等,所有这些都不断检查问题是否仍然存在。该过程要么收敛到显示错误的最小情况,要么(更有可能)显示真正导致这种奇怪行为的看似无关的事情。

这是我在 Linux 控制台上的工作日志;你可以在一个空目录中重放它。

mkdir -p q/{x,y}
echo > q/__init__.py
echo > q/x/__init__.py
echo > q/y/__init__.py
mkdir -p q/x/a
echo > q/x/a/__init__.py
echo "place='This is q.x.a.b'" > q/x/a/b.py
echo -e "import q.x.a.b as _b\n\nprint _b.place" > q/y/z.py
python -c 'from __future__ import absolute_import; import q.y.z'

预计它会打印 This is q.x.a.b .

关于Python 导入 AS 因绝对导入而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12494761/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com