python包、模块与文件系统的对应关系

包:对应于文件夹,模块:文件

导入模块

模块搜索路径
导入一个叫spam的模块时,解释器先在当前目录中搜索名为spam.py的文件,然后在环境变量PYTHONPATH指向的目录列表中搜索,然后是环境变量PATH中的路径列表。如果PYTHONPATH没有设置,或者文件没有找到,接下来搜索安装目录,在UNIX中,通常是 /usr/local/lib/python。

实际上,解释器由sys.path变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录),PYTHONPATH和安装目录


sys.path.append(modulepath)


 

使用该方法加入sys.path只能在运行时,下次运行编译器时就不存在,这里modulepath可以是包含.py/pyc/pyo/pyw等文件的zip或egg

dolphinschedule python 包路径 python 包路径 原理_python

dolphinschedule python 包路径 python 包路径 原理_搜索_02


 

__init__.py

模块import前都会调用该文件

dolphinschedule python 包路径 python 包路径 原理_环境变量_03

因此,可以在__init__.py文件中定义__all__

__all__

通过定义列表__all__,模块可以精确控制from module import *导入的名称集合,比如

module.py


__all__ = [‘bar’, ‘SomeClassName’, ‘SomeProperty’, ‘SomeFunction’]


from . import somemodule

.表示与调用模块相同的目录

..表示上级模块,比如from .. import somemodule

单独导入包名称不会导入包中所包含的子模块,比如:


import somepack

somepack.somemodule(xx) #失败!


但由于import somepack会执行somepack下的__init__.py,所以如果__init__.py中有

from . import somemodule之类的语句,则somepack.somemodule(xx)可以执行。

分发

一定的格式规范:

dolphinschedule python 包路径 python 包路径 原理_python_04

添加setup.py文件

dolphinschedule python 包路径 python 包路径 原理_python_05

dolphinschedule python 包路径 python 包路径 原理_环境变量_06

dolphinschedule python 包路径 python 包路径 原理_python_07

dolphinschedule python 包路径 python 包路径 原理_python_08

dolphinschedule python 包路径 python 包路径 原理_搜索_09

文件格式

python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模块的加载速度提高了,并没有提高代码的执行速度,通常情况下不用主动去编译pyc文件,文档上说只要调用了import model那么model.py就会先编译成pyc然后加载

py与pyc的区别

pyc:预编译过的

pyo

优化的预编译

python -O -m py_compile file.py

py与pyw的区别

Windows下.py用 python.exe 运行,.pyw用 pythonw.exe 运行

跟 python.exe 比较起来,pythonw.exe 有以下的不同:

1)执行时不会弹出控制台窗口(也叫 DOS 窗口)

2)所有向原有的 stdout 和 stderr 的输出都无效

3)所有从原有的 stdin 的读取都只会得到 EOF

 

.pyw 格式是被设计来运行开发完成的纯图形界面程序的。

纯图形界面程序的用户不需要看到控制台窗口。