python - 为什么绝对导入在 Python 2 中失败,但在 Python3 中成功?
问题描述
在摆弄 Python 导入系统时,我注意到这种形式的绝对导入在 Python 3.6.8 中运行良好,但ImportError
在 Python 2.7.17 中运行良好。包结构如下:
├── 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')
如果我main8.py
使用 Python3执行,则会pkg_a.pkg_c.mod2
成功导入。
$ python3 main8.py
Imported pkg_a.pkg_c.mod2
但是,如果我main8.py
使用 Python2 执行,它会抛出一个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
from __future__ import absolute_import
在顶部添加指令main8.py
并pkg_a/mod7.py
没有帮助。谁能解释一下为什么 Python2 导入会这样?
解决方案
对于 Python2,你需要一个__init__.py
next tomain8.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
推荐阅读
- javascript - 网页二维码扫描仪使用 nimiq qr-scanner github
- mysql - 如何在 phpMyAdmin 中使用 VARBINARY 列上的 LIKE 子句运行 MySQL 查询?
- c# - 有隐含的<inheritdoc />吗?
- reactjs - 如何在不使用本地/会话存储和 React 的情况下管理内存中的会话?
- c++ - C/C++:流式传输 MP3
- java - Java 使用 Scanner 多处资源泄露
- snowflake-cloud-data-platform - 无法理解雪花加密结果
- sql - 从列中选择不同的实例子字符串
- linux - 在多线程应用程序中同步线程
- javascript - 单选输入选择不会在表单重置回调中立即重置