show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次研究了文档
- 模块本身有三种对象
- 模块
- 变量
- 函数
- 可以用三引号来写文档
- 文档被写在
__doc__
这个字符串类型的属性里面 - 可以用help和网页的方式查看
- 模块的位置位于/usr/lib/python3.8/等目录下面
- 到底哪些路径是python类库的路径呢?
import sys
print(sys.path)
- 执行结果
- 这些文件被导入的时候
- 会先被编译为pyc文件
- 也就是python虚拟机
- 直接可运行的指令文件
- 然后放在
/usr/lib/python3.8/__pycache__
这个目录里面
- 以m(odule) 的方式运行 distro
python3 -m distro
- 结果看起来
- 输出了当前系统的
- 发行版细节
- distro(bution)
- 这distro模块 在哪呢?
import distro
print(distro)
print(id(distro))
print(type(distro))
- 运行结果
- 这路径在sys.path中吗?
- 路径在
- 系统的python路径下
- 可以打开这个 distro.py看看嘛?
vi /usr/lib/python3/dist-packages/distro.py
- 看起来有比较 明确的注释
- 这个distro.py是如何执行的呢?
/ __main__
- 查找
__main__
- 查找
-
找到1215中
- 条件判断
- 如果 当前的模块 是主模块
- 就调用 main()
-
在main()上 依次按下
- gd
- go to definition
- 跳转到main函数定义的位置
- 通过这个函数
- 可以得到当前系统的发行版
- 这个目录下面除了
- distro.py
- 还有什么呢?
- 也有不少的python文件
- 那么python的类库目录至少就有两个了
- 类库目录列表怎么查询来着?
- 这个变量里面存的就是系统(system)的路径(path)
- 这个对象是一个列表
- 列表中就是
- 查找类库的路径
- 也可以是zip包
- 列表中就是
- 如果将变量清空了会如何???
- 清空类库路径列表
- 就无法引入任何模块了
- 因为找不到了
- 如何理解sys.path?
- 面对一个需要导入的模块的名字
- 先查找这个模块是否是内置模块
- 去sys.path中去查找
- 那sys.path中的路径来自于什么呢?
- 需要用python运行的目录
- 系统环境变量$PYTHONPATH
- 默认的一系列类库目录
- 我们去试试
- 想引用一个o2z.py
- 但是找不到
echo "print(\"i am o2z\")" > ~/Code/o2z.py
- 将"print("i am o2z")" 输出重定向
- 录入 o2z.py
export PYTHONPATH=/home/shiyanlou/Code
- 将 系统变量PYTHONPATH
- 设置为/home/shiyanlou/Code
- 这样 oeasy.py 就可以
- 找到 o2z
- 并且 import o2z 了
- 设置路径后
- 在oeasy.py中
- 成功引用o2z.py
- 那 我能覆盖原来的类库 么?
- python会在列表路径中依次寻找相关模块
- 一旦找到了后面就不找了
- 如果红色路径中
- 找到random.py
- 就不会去蓝色路径中查找了
- 随机函数也就不随机了?!
print("this is oeasy's random.py")
def randint():
print("in oeasy random.randint")
return 0
- 构造random.py
- 保存之后 进入游乐场
import random
random.randint()
- 导入的时候
- 提醒我们进入了 自己的random.py
- 随机函数就不随机了
- 这次研究了python类库的来源
- 系统内置
- 类库目录
- 把py程序放到python类库列表中
- py程序就成一个类库包
- 可以直接运行此程序
- 也可以作为类库导入次程序
- py程序就成一个类库包
- 那我怎么知道 当前的py文件
- 是 引入的模块
- 还是 主控的程序 呢🤔
- 我们下次再说👋