python:模块和包

自己以前整理的笔记,不太完整,后续会不断更新。。。。


一、模块(module)

浏览程序目录会发现一个__pycache__目录,内部保存着.pyc文件(其中的c是compiled编译),这个文件是由python解释器将模块的源码转换为字节码后生成的,可优化程序的启动速度

  • python在解释源程序时是分两步走的:
    1. 处理源代码,编译生成一个二进制字节码
    2. 对字节码进行处理,生成机器码
  • 有了模块的字节码后,下一次运行程序时,若上次保存字节码之后没有修改过源代码,python将会加载.pyc文件并跳过编译步骤
  • 当python重编译时,它会自动检查源文件和字节码的时间戳
  • 如果你又修改了源代码,下次程序运行时,字节码将自动重新创建

模块的命名与标识符的命名规则一致

模块中定义的全局变量、函数、类都可提供给外界使用

01. 模块导入的方式

  1. 全部导入
import  模块名1,模块名2 # 可行,但不建议

# 推荐每行独立导入
import 模块名1
import 模块名2

# 简化模块名模块
import 模块名3 as 别名

以上方法一次性导入模块中所有工具

模块导入后可以通过模块名. 的方式调用模块中的全局变量、函数、类

注意:模块别名 应该符合 大驼峰命名法

# 不推荐使用
from 模块名 import *

上面的模块导入方法也可以将模块中的所有工具导入 ,并且使用时直接使用工具名但不推荐使用,因为一旦发生重名的情况,排查麻烦

  1. 部分导入
from 模块名 import 工具名

从模块中导入部分工具,导入之后可直接使用工具名 ,不需要通过模块名. 的方式调用

注意:

  1. 如果导入的两个模块工具名相同,后导入的模块会覆盖先导入的函数
  2. 如果发生冲突,可以使用as给工具名起别名
  3. 别名只是在使用的时候做区分,内存中还是导入时的工具名

02. 模块的搜索顺序

在导入模块时,python解释器会:

  1. 搜索当前目录有无指定模块
  2. 没有,则搜索系统目录

所以在自定义模块名时,不要和系统模块名重名,否则会导致导入当前目录下的模块

03. 开发常识

每个独立的.py文件都是一个模块

导入模块时,文件中的所有没有任何缩进的代码都会被执行一遍

一般模块都会写自测试代码,为保证测试代码在被导入其他程序中时不运行,需要将测试代码做一定的处理


# 代码最下方
# 测试代码封装在函数中
def main_debug():
    pass

# 根据__name__的值判断是否执行测试代码
if __name__ == '__main__':
    main_debug()

__ name__属性

是python的内置属性,如果在当前程序其值是_main_,如果被导入其他程序中运行,则其值是模块名

04.常用模块

04-1.os模块

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口

应用:python通过os模块来实现对文件系统的访问,由于python的跨平台性,os模块会根据不同的操作系统在后台实现操作文件及目录的功能,虽然在调用方法时其名称都是一致的。

操作 说明
os.remove(‘path/filename’) 删除文件
os.rename(oldname, newname) 重命名文件
os.walk() 生成目录树下的所有文件名
os.chdir('dirname') 改变目录
os.mkdir/makedirs('dirname') 创建目录/多层目录
os.rmdir/removedirs('dirname') 删除目录/多层目录
os.listdir('dirname') 列出指定目录的文件
os.getcwd() 取得当前工作目录
os.chmod() 改变目录权限
os.path.basename(‘path/filename’) 去掉目录路径,返回文件名
os.path.dirname(‘path/filename’) 去掉文件名,返回目录路径
os.path.join(path1[,path2[,...]]) 将分离的各部分组合成一个路径名
os.path.split('path') 返回( dirname(), basename())元组
os.path.splitext() 返回 (filename, extension) 元组
os.path.getatime\ctime\mtime 分别返回最近访问、创建、修改时间
os.path.getsize() 返回文件大小
os.path.exists() 是否存在
os.path.isabs() 是否为绝对路径
os.path.isdir() 是否为目录
os.path.isfile() 是否为文件

04-2.sys模块

sys模块是与python 解释器交互的一个接口,提供了一系列的函数和变量,用于操控python的运行时环境

一些应用:

操作 说明
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.path.append('c:/xxx') 临时添加模块搜索路径,程序结束后添加的路径失效
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit() 退出程序,正常退出时exit(0)
sys.modules.keys() 返回所有已经导入的模块列表
sys.modules 返回系统导入的模块字段,key是模块名,value是模块
sys.platform 返回操作系统平台名称

二、包(package)

  • 一个包是包含多个模块的文件夹,即包含多个.py文件
  • 且文件夹中包含一个特殊的文件_init_.py
  • 命名规则与标识符一致
  • **import 包名 **可以一次性导入包中的所有模块
  • 我们在导入一个包时,实际上是导入了它的__init__.py文件,其主要作用是限制外界访问模块的种类

外界要使用包中模块,需要先在_init_.py文件中设置外界可访问的模块列表:

# 从当前目录中导入模块
# 这里的模块列表是外界可访问的模块列表

from . import 模块名1
from . import 模块名2
# 或者直接导入模块
import 模块名3

__init__.py 中还有一个重要的变量,叫做 __all__

# __init__.py
__all__ = ['os', 'sys', 're', 'urllib']

当在其他python文件中使用from package import *时,就会把注册在__init__.py文件中__all__列表中的模块和包导入到当前文件中来,而没注册的则不会导入

三、发布包

制作发布压缩包步骤:

  1. 创建setup.py
from distutils.core import setup

setup(name="hm_message",  # 包名
      version="1.0",  # 版本
      description="itheima's 发送和接收消息模块",  # 描述信息
      long_description="完整的发送和接收消息模块",  # 完整描述信息
      author="itheima",  # 作者
      author_email="itheima@itheima.com",  # 作者邮箱
      url="www.itheima.com",  # 主页
      py_modules=["hm_message.send_message",  # 发布的包名.模块名列表
                  "hm_message.receive_message"])

在要发布的包的同级目录下,创建一个setup.py文件内容模板如上

  1. 构建模块

python setup.py build

  1. 生成发布压缩包

python setup.py sdist

注意: 要制作哪个版本的模块,就使用哪个版本的解释器执行!

四、安装及卸载包

安装包

  1. 解压发布的压缩包

tar -zxvf 压缩包名

  1. 安装

进入到解压后的文件夹中运行以下命令

sudo python setup.py install

卸载包

直接从安装目录下,把安装模块的 目录 删除就可以(Ubuntu环境下的操作)

sudo rm -r 包文件

使用pip包管理工具

  1. window下

pip install 包名

  1. ubuntu下

sudo pip install 包名

sudo pip unistall 包名

python中关于模块的一些操作

查看模块的保存目录

import random
import tomd

print(random.__file__)
print(tomd.__file__)

查看python的安装路径

import sys
print(sys.executable)

# ubuntu中
which python
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352