python的import原理和方式总结

python中import的几种方式:

1. import math

    import os, math, sys

2. import math as pymath

3. from math import exp

4. from math import *

 

在理解import原理之前,需要明白python的库,模块,包:

库library:一种特定功能集合的通俗说法

包含一些程序功能,通过import 引入使用对应模块和包,python也具有一些标准库,还有第三方库

模块module:以单个文件为命名空间的代码片段

模块是一个单独的.py文件,模块名就是文件名,一般模块有这段代码,区分是被导入对象还是主程序:if __name__ == "__name__"

包package:由一组模块构成,有层次命名空间的程序功能

包由多个.py文件有组织的构成,包是模块的上一级概念

 

 

 接着来理解python如何将库,包,模块import进来的:

Python 执行以下语句会发生什么:

1
import mod

当解释器执行上面的import语句时,它将在从以下来源收集的目录列表中搜索mod.py

  • 输入脚本的运行目录,如果解释器正在交互运行,则为当前目录。
  • PYTHONPATH环境变量(如果已设置)中包含的目录列表。 (“PYTHONPATH”的格式取决于操作系统,但与”PATH”环境变量相似。)
  • 在安装 Python 时配置的与安装有关的目录列表。

在 Python 变量 sys.path 中可以访问生成的搜索路径,该变量是从名为 sys 的模块获得的:

1
2
3
4
5
6
>>> import sys
>>> sys.path
['', '/home/roark/personal', '/home/roark/workdir',
'/usr/local/Python/3.7/lib',
'/usr/local/python3.7/site-packages',
'/usr/local/Python/3.7/python37.zip', '/usr/local/Python/3.7/lib/python3.7']

因此,为了确保找到我们的模块,我们需要执行以下操作之一:

  • mod.py放置在输入脚本所在的目录或当前工作目录中(如果是交互式的话)
  • 在启动解释器之前修改”PYTHONPATH”环境变量以包含”mod.py”所在的目录(或将”mod.py”放入”PYTHONPATH”变量已包含的目录之一)

实际上还有一个附加选项:我们可以将模块文件放在您选择的任何目录中,然后在运行时修改 sys.path 使其包含该目录。例如,在这种情况下,我们可以将”mod.py”放在目录”/home/sarah/”中,然后发出以下语句:

1
2
3
4
5
6
7
8
>>> sys.path.append(r'/home/sarah/')
>>> sys.path
['', '/home/roark/personal', '/home/roark/workdir',
'/home/sarah',
'/usr/local/Python/3.7/lib',
'/usr/local/python3.7/site-packages',
'/usr/local/Python/3.7/python37.zip', '/usr/local/Python/3.7/lib/python3.7']
>>> import mod

导入模块后,我们可以使用模块的file属性来确定找到该模块的位置:

1
2
3
4
5
6
7
>>> import mod
>>> mod.__file__
'/home/sarah/mod.py'

>>> import datetime
>>> datetime.__file__
'/usr/local/Python/3.7/lib/datetime.py'

file的目录部分应该是 sys.path 中的目录之一。

posted @ 2021-05-27 13:34  鲍曼小学生  阅读(1062)  评论(0编辑  收藏  举报