【白话python连载(7.2)】python的模块介绍

欢迎大家关注公众号 【哈希大数据】
python的模块介绍----动手打包共享
一、模块的定义与生成

python模块是一个包含定义的变量、函数和类的文件,其后缀名是.py。

特点:模块可以被其他程序导入,以使用该模块中定义的类,函数是模块中对应类的方法,而变量则是类的属性。

为了防止不同模块中变量名的重复和冲突,python中通常采用“包”形式即文件目录结构来管理不同的模块。只要顶层的目录文件名不同,就可以防止模块或模块中变量或函数名定义相同而冲突的问题。两个module1在使用中依次为:module_manage,module2.module1;module_manage.module1

image

如module_manage这个python包,与常规的文件夹所不同的是,需要额外添加一个init.py的模块(文件中可以不添加任何内容)来表明这个文件是python的包。如果使用pycharm编辑器,在新建包时将会自动完成init.py的模块的添加。而且在一个python包中,也可以嵌套其他的python包,方便模块功能的实现与复用。

二、模块的安装和应用

对于python自带的模块可以直接导入使用,而对于第三方模块的使用,需要在python环境中提前安装好要使用的模块。常规的安装方法直接使用python的pip模块(在初始化安装python编辑器的过程中,勾选后已经自动安装),安装方式:pip install module_name。卸载方式:pip uninstall module_name。

如pillow这个模块,是之前已经成功安装过的,所以再次安装时则会提示对应的模块已经存在。因为电脑中有两个版本的python,因此为了对应管理不同版本中的模块可以重命名pip,进行不同版本中的模块安装。

image

因此这里先将其卸载再尝试安装一下。卸载方式:

image

使用‘模块名’==‘版本号’的方式在安装过程中指定模块的版本号。

image

安装好的模块,使用 import module/from module import name1,name2 可以导入完整模块或者是模块的部分属性,同时为了更方便的使用模块也可以在导入模块中另外给模块进行命名,如在python对数据的处理中经常使用的两个模块import numpy as np和import pandas as pd。在python中重复导入同一个模块,将只会以最后一次导入为主,这样可以减少查找重复模块的次数。

image

import的工作机制

使用import是在环境变量中依次查找是否有对应的python模块,使用自带的sys.path功能可以查看模块所存在的位置。

image

使用import将会在这些地方查找需要的模块,如果没有找到则会报错。找到的话则会将其编译成字节码也就是.pyc文件。然后会执行模块中的代码,并创建其中所需要的对象。

image

三、模块的打包和发布

如果要将完成的模块进行打包和发布的话,需要进行前期准备工作:以一个dist_module.py模块为例--该模块实现的功能是输出当前时间和指定天数前后的时间,具体代码为:

#!/usr/bin/python# 
-*- coding: utf-8 -*-
from datetime import *
def time_manage(n): 
today = datetime.now() 
print("当前日期是:" ,today) 
n = int(n) 
memory = today + timedelta(days=n) 
print(n,"天后的日期是:" , memory)
if __name__ == '__main__':
 n = input("请输入你要查询的天数:")
 time_manage(n)

在完成模块下添加一个平行的setup.py的模块的,使用distutils来发布模块,在setup.py文件中,添加如下内容:

from distutils.core import setup
setup( name='dist_module', version='1.0.0',
 py_modules = ['dist_module'], author='ziyi', author_email='[email protected]', url='1', 
description='计算n天左右的时间',)

然后将对应完成的dist_module.py和setup.py模块放入同一个文件中,该文件夹命名与dist_module.py模块的名称一致,即dist_module。目录结构如下:

image

前期准备工作完成后,就可以进行模块的打包和发布了:

在dist_module.py文件下打开命令窗口:否则的话给定setup.py文件的具体位置。然后执行python setup.py sdist。完成模块的打包工作,为对应的模块创建一个源码包。

image

模块打包结束后对应的文件目录变为如下:

image

然后再将该模块添加到本地的python包管理空间中,使用python setup.py install。

image

之后即可在其他文件中导入该模块进行复用。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import dist_module
print(dist_module.time_manage(6))

输出结果D:/vernacular/module_mana/module_manage/module1.py当前日期是: 2018-02-08 17:17:58.2744286 天后的日期是: 2018-02-14 17:17:58.274428Process finished with exit code 0

此外在windows系统下,在命令窗口中执行python setup.py bdist_wininst 生成.exe的可执行文件。

猜你喜欢

转载自blog.csdn.net/hashdata2018/article/details/80292709