八、模块与包

一、模块

在python中,模块就是一个代码文件,模块中可以定义类、函数、变量,也可以包含可执行的代码。

使用Import导入。

1.1 搜索路径

搜索模块时,python会按照sys.path列表中的路径,依次进行搜索。可以通过sys.path查看搜索路径。

将模块的路径添加到sys.path路径的三种方法:

(1)动态添加

sys.path.append(模块路径),动态添加需要每次在程序启动时,向sys.path添加。

(2)若经常用到,可以在Python安装目录下的Lib\site-packages文件夹下建立一个纯文本文件,扩展名为.path。

(3)修改环境变量。

1.2 导入模块

可以一次导入多个模块

1.3 导入指定的模块属性

如:from xlutils.copy import copy

1.4 加载模块

在程序开发中,一个模块可以在多处被import,但Python只会导入一次,因为所有加载到内存的模块都会被放入到sys.modules中。

加载模块会导致这个模块被“执行”。

1.5 名称空间

Python程序执行时存在内建名称空间、全局名称空间和局部名称空间。

1.6 “编译”的Python文件

Python中一旦被引用的模块(假设为example.py)被成功编译,其对应的编译版本example.pyc就会被创建。如果创建成功,那么example.py的修改时间会记录在example.pyc中,下次载入时,如果两个文件的修改时间不匹配,则.pyc文件就会被忽略。如果有可用的.pyc文件,则会使用.pyc文件提高模块的加载速度。当程序需要加载多个模块时,.pyc文件能够有效地提高程序的启动速度。

1.7 自动导入模块

sys模块的modules变量中存储了完整且成功导入的模块信息。

1.8 循环导入

循环导入(circular import)是一种死循环,即A代码需要B才能执行,而偏偏B代码是建立在A代码基础上。

二、包

包(Package)可以看成模块的集合,只要一个文件夹下面有__init__.py文件,那么该文件夹就可以看作一个包。包下面还可以有子包。

导入包的过程与导入模块的基本一致,只是导入包的时候会执行目录下的__init__.py,而不是模块里的语句。另外,如果只是单纯地导入包,而包的__init__.py中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。

例如,一个简章的包目录

Pac/
        __init__.py
        Subpac1/
                __init__.py
                Modu1.py
        Subpac2/
                __init__.py
                Modu1.py

导入方法:

from Pac.Subpac1 import Modu1

import Pac.Subpac1.Modu1

三、程序打包

Python提供了Distutils、Setuptools、Py2exe、PyInstaller、cx_freeze等程序打包工具,其中,Setuptools是Distutils的增强工具,Py2exe、PyInstaller、cx_freeze是windows平台下制作exe文件的工具。Distutils包含在Python的标准版发行包中。

3.1 Distutils

例如,首先建立一个hello.py文件。

(1)建立一个setup.py文件,内容如下:

from distutils.core import setup
setup(name='hello',version='1.0',description='hello ccc',author='cheng',py_modules=['hello'])

(2)执行打包命令:

       >>>python setup.py sdist

结果:该命令创建了dist目录,并将要打包的文件复制到hello-1.0.zip的压缩文件中。

3.2 py2ext

py2exe暂时到目前只支持到3.4版本(包括cxfreeze),在3.5版本中会报错。

(1)建立建立一个setup.py文件,内容如下:

from distutils.core import setup
import py2exe
setup(console=['hello.py'])

(2)执行命令:

    >>>python setup.py py2exe

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值