[英]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.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.py
和pkg_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.