繁体   English   中英

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

[英]Why is absolute import failing with Python 2, but succeeding with Python3?

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

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

main8.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__ import absolute_import指令没有帮助。 任何人都可以解释为什么 Python2 导入的行为是这样的?

对于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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM