Python 踏坑之旅:今天我被 Python 的 import 给坑啦 T_T

一、引言

最近在学习《Flask Web Development 2nd Edition》的时候,仿照书上的教程写了一些练习代码,并在虚拟环境中安装了 flask_bootstrap 库。

这是我当前的用户目录:
Python 踏坑之旅:今天我被 Python 的 import 给坑啦 T_T

然后,我想要编辑代码,import flask_bootstrap 库中的 Bootstrap 内容:
Python 踏坑之旅:今天我被 Python 的 import 给坑啦 T_T

它,居然报错了?!

我明明在这个虚拟环境中安装了 flask_bootstrap 库的呀。我仔细检查了下自己有没有输入正确,以及库是否正确安装,发现都没有问题。

那么,问题出在哪里呢?

二、そうか

问题到底出在哪里呢?
Python 踏坑之旅:今天我被 Python 的 import 给坑啦 T_T
看到我用红色框画出来的地方没,我好死不死创建了一个 Python 文件正好与我想要引入的库名字相同,这也就是为什么会报错的原因,因为 Python 解释器第一优先级从当前目录下寻找 flask_bootstrap,然后就找到了我自己写的那个文件,可是这个文件里面并没有 Bootstrap,所以就报错了。

这真是一个非常坑的一个地方,我们再来好好总结下 Python 的 import 的寻找流程(来自于 《Head First Python 2nd Edition》P173):

1. Your current working directory
This is the folder that the interpreter thinks you are currently working in.

2. Your interpreter’s site-packages locations
These are the direction that contain any third-party Python modules you may have installed(including any written by you).

3. The standard library locations
These are the directories that contains all the modules that make up the standard library.

简单翻译下,也就是说 Python 的 import 首先从当前工作目录寻找模块,如果没有,就去解释器所在的 site-packages 目录(也就是第三方库地址)去找,如果还没有,就去标准库所在地址找。

我下载的 flask_bootstrap 肯定位于第二优先级中的第三方库的位置,却被第一优先级的当前工作目录的同名文件给“污染”了,因此才出现了这个问题。

三、解决

问题解决是很方便的,只需要修改当前目录下的 flask_bootstrap.py 文件名为任何其他的就可以了:
Python 踏坑之旅:今天我被 Python 的 import 给坑啦 T_T

如图,问题解决!

四、总结

不得不说,以后在当前目录为 Python 文件起名的时候,需要注意一下了,一定要规避标准库、第三方库的名字,不然就会出现这种匪夷所思的问题。

Python 还要继续学习

To be Stronger:)