gpt4 book ai didi

python - Python 2.7 和 3.4 导入包的区别

转载 作者:太空狗 更新时间:2023-10-29 17:47:41 24 4
gpt4 key购买 nike

对于这个目录层次结构:

.
├── hello
│   ├── __init__.py
│   └── world
│   └── __init__.py
└── test.py

和 Python 源文件:

测试.py:

if __name__ == '__main__':
import hello

你好/__init__.py:

import world

你好/世界/__init__.py:

print("yes you win")

用 Python 3.4 运行 test.py 会抛出 ImportError 说找不到模块 world,但是用 Python 2.7 一切正常。

我知道在搜索导入模块时引用了 sys.path,所以将目录 hello 添加到 sys.path 消除了错误。

但是在 Python 2.7 中,在导入 world 之前,目录 hello 也不在 sys.path 中。是什么导致了这种差异? Python 2.7 是否应用了任何递归搜索策略?

最佳答案

Python 3 使用绝对导入(参见 @user2357112 指出的 PEP 328)。简而言之,Python 3 从每个 sys.path 条目的根开始搜索,而不是首先查询模块的目录,就好像它是 sys.path 中的前置条目一样>.

要获得您想要的行为,您可以:

  • 显式使用相对导入:from .在hello
  • 中导入world
  • 使用绝对导入:import hello.world

关于python - Python 2.7 和 3.4 导入包的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249119/

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