为什么绝对导入在python2中失败了,而在Python3中成功了?

2024-10-01 02:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

main8.py

import pkg_a.mod7

包装a/mod7.py

import pkg_a.pkg_c.mod2

包a/包c/mod2.py

print('Imported pkg_a.pkg_c.mod2')

如果我用Python3执行main8.py,那么pkg_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__ import absolute_import指令没有帮助。有人能解释一下为什么Python2导入会这样吗?你知道吗


Tags: inpyimportinit系统linepkgfile
1条回答
网友
1楼 · 发布于 2024-10-01 02:36:17

对于Python2,需要在__init__.py旁边有一个main8.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

相关问题 更多 >