python 中的模块、包以及搜索路径的问题
1. 模块(module)
1.1 什么是模块?
一个 .py 文件就是一个模块。
1.2 模块搜索路径
当你导入一个模块,Python 解析器对模块位置的搜索顺序是:
- 1、当前目录(入口的目录,比如 python main.py 是指 main.py 所在的目录)
- 2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
- 3、如果都找不到,Python 会察看默认路径。UNIX下,默认路径一般为 /usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
1.3 增加搜索路径
既然模块搜索路径存储在 system 模块的 sys.path 变量中,只要向里面添加路径就可以增加搜索路径。
比如对于下面这个 project, main.py 中需要引入 package_1 的时候,明显是找不到的,因为 package_1 不在 API 目录下。
project_dir
|--API
|--main.py
|--package_1
|-- __init__.py
|-- module_1.py
|-- module_2.py
此时可以在 main.py 中 添加如下代码,增加搜索路径,就可以找到 package_1。
sys.path.append('..')
from package_1.module_1 import function1