gpt4 book ai didi

python - 为什么绝对导入在 Python 2 中失败,但在 Python3 中成功?

转载 作者:行者123 更新时间:2023-12-02 05:56:34 25 4
gpt4 key购买 nike

在摆弄 Python 导入系统时,我注意到这种形式的绝对导入在 Python 3.6.8 中运行良好,但在 Python 2.7.17 中抛出 ImportError 。包结构如下:

├── main8.py
├── pkg_a
│   ├── __init__.py
│   ├── mod7.py
│   ├── pkg_c
│   │   ├── __init__.py
│   │   ├── mod2.py

ma​​in8.py

import pkg_a.mod7

pkg_a/mod7.py

import pkg_a.pkg_c.mod2

pkg_a/pkg_c/mod2.py

print('Imported pkg_a.pkg_c.mod2')

如果我使用 Python3 执行 main8.pypkg_a.pkg_c.mod2 会成功导入。

$ python3 main8.py 
Imported pkg_a.pkg_c.mod2

但是,如果我使用 Python2 执行 main8.py,它会抛出 ImportError

$ python2 main8.py 
Traceback (most recent call last):
File "main8.py", line 1, in <module>
import pkg_a.mod7
File "pkg_a/mod7.py", line 1, in <module>
import pkg_a.pkg_c.mod2
ImportError: No module named pkg_c.mod2

main8.pypkg_a/mod7.py 顶部添加 from __future__ importabsolute_import 指令没有帮助。谁能解释一下为什么Python2导入会这样?

最佳答案

对于 Python2,您需要在 main8.py 旁边有一个 __init__.py 来制作包:

.
├── __init__.py
├── main8.py
└── pkg_a
├── __init__.py
├── __init__.pyc
├── mod7.py
├── mod7.pyc
└── pkg_c
├── __init__.py
├── __init__.pyc
├── mod2.py
└── mod2.pyc

2 directories, 10 files

运行:

>> /usr/bin/python2.7 ./main8.py
Imported pkg_a.pkg_c.mod2

>> python3 ./main8.py
Imported pkg_a.pkg_c.mod2

关于python - 为什么绝对导入在 Python 2 中失败,但在 Python3 中成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59508883/

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