Python凭什么就那么好用呢?
毫无疑问,大量现成又好用的内置/第三方库功不可没。
那我们是怎么使用它们的呢?
噢,对了~是用的import xxx这个语句。
之所以会有此一问,也是之前有一次使用PyCharm进行开发时(又)踩了个坑……
废话少说,先讲问题
像下面这样一个项目结构:Projetc_example
|-- A
|-- alpha.py
|-- beta.py
|-- B
|-- theta.py
|-- main
|-- main.py
假设要在main.py中导入theta.py:# main/main.py
from B import theta
显然会导致我们所不希望的问题,即Python不知道要到哪里去找这个名为B的模块(包是一种特殊的模块):Traceback (most recent call last):
File "main/main.py", line 1, in
from B import theta
ModuleNotFoundError: No module named 'B'
可是这就奇了怪了,为啥同样的代码,在PyCharm里运行就是好的了呢?
import的查找路径
于是我们不辞艰辛,上下求索,原来在Python中,import语句实际上封装了一系列过程。
1. 查找是否已导入同名模块
首先,Python会按照import xxx中指定的包名,到sys.modules中查找当前环境中是否已经存在相应的包——不要奇怪为什么都没有导入sys这个模块就有sys.modules了。
sys是Python内置模块,也就是亲儿子,导入只是意思一下,让我们这样的外人在导入的环境中也可以使用相关接口而已,实际上相应的数据对Python而言从始至终都是透明的。