Python的模块、包等概念的理解

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等文件的zipegg

clip_image002

clip_image004

 

__init__.py

模块import前都会调用该文件

clip_image006

因此,可以在__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)可以执行。

分发

一定的格式规范:

clip_image007

添加setup.py文件

clip_image008

clip_image010

clip_image012

clip_image014

clip_image016

文件格式

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

pypyc的区别

pyc:预编译过的

pyo

优化的预编译

python -O -m py_compile file.py

pypyw的区别

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

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

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

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

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

 

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

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

 

 

参考资料:

Python sys.path详解

posted on 2011-08-30 12:11  yaksea  阅读(4246)  评论(0编辑  收藏  举报