大型项目中为了维护方便,通常使用模块化开发,模块化的过程中,就会涉及到各种包或者模块的相互导入,即使是对于有多个项目的Python开发者来说,
import
也会让人困惑!本文带你深入了解python中import
的内在机制,从而避免import导入引发的异常。
概念
模块(module)
任何.py
文件都可以称为模块
包(package)
可以将多个模块放入一个包中,就像电脑中的文件夹,但与文件夹的区别是,package包含__init__.py
文件
Python import 的搜索路径
当我们执行python xx.py
时,python是如何帮我们正确定位包所在的目录呢?其实系统是按照以下顺序来寻找的:
1.系统内置模块,比如os, sys模块2.入口文件所在的目录,比如main.py所在的目录3.Python环境变量,也就是我们平时pip install后的包所在的目录,如Anaconda下的site-packages目录
在Python中,如果遇到了import错误,我们可以通过以下命令查看搜索路径:
import sysprint(sys.path)
结果:
sys.path: ['/Users/root/Python/project','/Users/root/anaconda3/lib/python36.zip','/Users/root/anaconda3/lib/python3.6','/Users/root/anaconda3/lib/python3.6/lib-dynload','/Users/root/.local/lib/python3.6/site-packages','/Users/root/anaconda3/lib/python3.6/site-packages','/Users/root/anaconda3/lib/python3.6/site-packages/Sphinx-1.5.6-py3.6.egg','/Users/root/anaconda3/lib/python3.6/site-packages/aeosa','/Users/root/anaconda3/lib/python3.6/site-packages/mdr-0.0.1-py3.6-macosx-10.7-x86_64.egg']
可以看到