Python 的模块导入机制是理解 Python 项目结构和运行行为的关键。下面从基本概念 → 导入流程 → 搜索路径 → 常见形式 → 缓存与重载 → 常见问题来系统说明。
.py 文件就是一个模块__init__.py 的目录(Python 3.3+ 后可无 __init__.py,但习惯上仍用)# module_a.py
x = 1
# main.py
import module_a
print(module_a.x)
import module
import module as m
from module import name
from module import name as n
from package import module
from package.module import func
⚠️ 注意:from module import * 不推荐(命名污染)
当你写:
import xxx
Python 实际做了以下几步:
import sys
sys.modules
✅ 模块只会被导入一次
搜索顺序:
sys.path 中的路径PYTHONPATH查看路径:
import sys
print(sys.path)
.pyc)__pycache__⚠️ 模块顶层代码会被执行一次
# module.py
print("module loaded")
import module # 会打印
import module # 不会再次打印
from package.subpackage import module
from . import module
from ..subpackage import x
⚠️ 相对导入 不能用于直接运行的脚本
__name__if __name__ == "__main__":
main()
__name__ == "module_name"__name__ == "__main__"import sys
sys.modules['module_name']
import importlib
importlib.reload(module)
# a.py
import b
# b.py
import a
✅ 解决方式:
python sub/main.py
可能导致 sys.path[0] 不是项目根目录
✅ 建议:
python -m package.moduleimport json # 自己写了 json.py 会冲突
| 特性 | Python 2 | Python 3 |
|---|---|---|
| 默认导入 | 相对+绝对混乱 | 绝对导入 |
import * |
常见 | 不推荐 |
| 包机制 | 必须 __init__.py |
可无 |
Python 导入机制 = 查找 → 加载 → 执行 → 缓存,模块只执行一次,包结构决定可维护性。
如果你愿意,我可以进一步讲:
importlib 高级用法你更想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。