Python模块和包(python中模块和包)
off999 2024-10-04 00:34 26 浏览 0 评论
目标
- 模块
- 包
- 发布模块
01. 模块
1.1 模块的概念
模块是 Python 程序架构的一个核心概念
- 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
- 模块名 同样也是一个 标识符,需要符合标识符的命名规则
- 在模块中定义的 全局变量 、函数、类 都是提供给外界直接使用的 工具
- 模块 就好比是 工具包,要想使用这个工具包中的工具,就需要先 导入 这个模块
1.2 模块的两种导入方式
1)import 导入
import 模块名1, 模块名2
提示:在导入模块时,每个导入应该独占一行
import 模块名1 import 模块名2
- 导入之后
- 通过 模块名. 使用 模块提供的工具 —— 全局变量、函数、类
使用 as 指定模块的别名
如果模块的名字太长,可以使用 as 指定模块的名称,以方便在代码中的使用
import 模块名1 as 模块别名
注意:模块别名 应该符合 大驼峰命名法
2)from...import 导入
- 如果希望 从某一个模块 中,导入 部分 工具,就可以使用 from ... import 的方式
- import 模块名 是 一次性 把模块中 所有工具全部导入,并且通过 模块名/别名 访问
# 从 模块 导入 某一个工具 from 模块名1 import 工具名
- 导入之后
- 不需要 通过 模块名.
- 可以直接使用 模块提供的工具 —— 全局变量、函数、类
注意
如果 两个模块,存在 同名的函数,那么 后导入模块的函数,会 覆盖掉先导入的函数
- 开发时 import 代码应该统一写在 代码的顶部,更容易及时发现冲突
- 一旦发现冲突,可以使用 as 关键字 给其中一个工具起一个别名
from...import *(知道)
# 从 模块 导入 所有工具 from 模块名1 import *
注意
这种方式不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查
1.3 模块的搜索顺序[扩展]
Python 的解释器在 导入模块 时,会:
- 搜索 当前目录 指定模块名的文件,如果有就直接导入
- 如果没有,再搜索 系统目录
在开发时,给文件起名,不要和 系统的模块文件 重名
Python 中每一个模块都有一个内置属性 __file__ 可以 查看模块 的 完整路径
示例
import random # 生成一个 0~10 的数字 rand = random.randint(0, 10) print(rand)
注意:如果当前目录下,存在一个 random.py 的文件,程序就无法正常执行了!
- 这个时候,Python 的解释器会 加载当前目录 下的 random.py 而不会加载 系统的 random 模块
1.4 原则 —— 每一个文件都应该是可以被导入的
- 一个 独立的 Python 文件 就是一个 模块
- 在导入文件时,文件中 所有没有任何缩进的代码 都会被执行一遍!
实际开发场景
- 在实际开发中,每一个模块都是独立开发的,大多都有专人负责
- 开发人员 通常会在 模块下方 增加一些测试代码
- 仅在模块内使用,而被导入到其他文件中不需要执行
__name__ 属性
- __name__ 属性可以做到,测试模块的代码 只在测试情况下被运行,而在 被导入时不会被执行!
- __name__ 是 Python 的一个内置属性,记录着一个 字符串
- 如果 是被其他文件导入的,__name__ 就是 模块名
- 如果 是当前执行的程序 __name__ 是 __main__
在很多 Python 文件中都会看到以下格式的代码:
# 导入模块
# 定义全局变量
# 定义类
# 定义函数
# 在代码的最下方
def main():
# ...
pass
# 根据 __name__ 判断是否执行下方代码
if __name__ == "__main__":
main()
02. 包(Package)
概念
- 包 是一个 包含多个模块 的 特殊目录
- 目录下有一个 特殊的文件 __init__.py
- 包名的 命名方式 和变量名一致,小写字母 + _
好处
- 使用 import 包名 可以一次性导入 包 中 所有的模块
案例演练
- 新建一个 hm_message 的 包
- 在目录下,新建两个文件 send_message 和 receive_message
- 在 send_message 文件中定义一个 send 函数
- 在 receive_message 文件中定义一个 receive 函数
- 在外部直接导入 hm_message 的包
__init__.py
- 要在外界使用 包 中的模块,需要在 __init__.py 中指定 对外界提供的模块列表
# 从 当前目录 导入 模块列表 from . import send_message from . import receive_message
03. 发布模块(知道)
- 如果希望自己开发的模块,分享 给其他人,可以按照以下步骤操作
3.1 制作发布压缩包步骤
1) 创建 setup.py
- 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"])
有关字典参数的详细信息,可以参阅官方网站:
https://docs.python.org/2/distutils/apiref.html
2) 构建模块
$ python3 setup.py build
3) 生成发布压缩包
$ python3 setup.py sdist
注意:要制作哪个版本的模块,就使用哪个版本的解释器执行!
3.2 安装模块
$ tar -zxvf hm_message-1.0.tar.gz $ sudo python3 setup.py install
卸载模块
直接从安装目录下,把安装模块的 目录 删除就可以
$ cd /usr/local/lib/python3.5/dist-packages/ $ sudo rm -r hm_message*
3.3 pip 安装第三方模块
- 第三方模块 通常是指由 知名的第三方团队 开发的 并且被 程序员广泛使用 的 Python 包 / 模块
- 例如 pygame 就是一套非常成熟的 游戏开发模块
- pip 是一个现代的,通用的 Python 包管理工具
- 提供了对 Python 包的查找、下载、安装、卸载等功能
安装和卸载命令如下:
# 将模块安装到 Python 2.x 环境 $ sudo pip install pygame $ sudo pip uninstall pygame # 将模块安装到 Python 3.x 环境 $ sudo pip3 install pygame $ sudo pip3 uninstall pygame
在 Mac 下安装 iPython
$ sudo pip install ipython
在 Linux 下安装 iPython
$ sudo apt install ipython $ sudo apt install ipython3
相关推荐
- 在NAS实现直链访问_如何访问nas存储数据
-
平常在使用IPTV或者TVBOX时,经常自己会自定义一些源。如何直链的方式引用这些自定义的源呢?本人基于armbian和CasaOS来创作。使用标准的Web服务器(如Nginx或Apache...
- PHP开发者必备的Linux权限核心指南
-
本文旨在帮助PHP开发者彻底理解并解决在Linux服务器上部署应用时遇到的权限问题(如Permissiondenied)。核心在于理解“哪个用户(进程)在访问哪个文件(目录)”。一、核心...
- 【Linux高手必修课】吃透sed命令!文本手术刀让你秒变运维大神!
-
为什么说sed是Linux运维的"核武器"?想象你有10万个配置文件需要批量修改?传统方式要写10万行脚本?sed一个命令就能搞定!这正是运维工程师的"暴力美学"时...
- 「实战」docker-compose 编排 多个docker 组成一个集群并做负载
-
本文目标docker-compose,对springboot应用进行一个集群(2个docker,多个类似,只要在docker-compose.yml再加boot应用的服务即可)发布的过程架构...
- 企业安全访问网关:ZeroNews反向代理
-
“我们需要让外包团队访问测试环境,但不想让他们看到我们的财务系统。”“审计要求我们必须记录所有第三方对内部系统的访问,现在的VPN日志一团糟。”“每次有新员工入职或合作伙伴接入,IT部门都要花半天时间...
- 反向代理以及其使用场景_反向代理实现过程
-
一、反向代理概念反向代理(ReverseProxy)是一种服务器配置,它将客户端的请求转发给内部的另一台或多台服务器处理,然后将响应返回给客户端。与正向代理(ForwardProxy)不同,正向代...
- Nginx反向代理有多牛?一篇文章带你彻底搞懂!
-
你以为Nginx只是个简单的Web服务器?那可就大错特错了!这个看似普通的开源软件,实际上隐藏着惊人的能力。今天我们就来揭开它最强大的功能之一——反向代理的神秘面纱。反向代理到底是什么鬼?想象一下你...
- Nginx反向代理最全详解(原理+应用+案例)
-
Nginx反向代理在大型网站有非常广泛的使用,下面我就重点来详解Nginx反向代理@mikechen文章来源:mikechen.cc正向代理要理解清楚反向代理,首先:你需要搞懂什么是正向代理。正向代理...
- centos 生产环境安装 nginx,包含各种模块http3
-
企业级生产环境Nginx全模块构建的大部分功能,包括HTTP/2、HTTP/3、流媒体、SSL、缓存清理、负载均衡、DAV扩展、替换过滤、静态压缩等。下面我给出一个完整的生产环境安装流程(C...
- Nginx的负载均衡方式有哪些?_nginx负载均衡机制
-
1.轮询(默认)2.加权轮询3.ip_hash4.least_conn5.fair(最小响应时间)--第三方6.url_hash--第三方...
- Nginx百万并发优化:如何提升100倍性能!
-
关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。Nginx是大型架构的核心,下面我重点详解Nginx百万并发优化@mikechen文章来源:mikechen....
- 在 Red Hat Linux 上搭建高可用 Nginx + Keepalived 负载均衡集群
-
一、前言在现代生产环境中,负载均衡是确保系统高可用性和可扩展性的核心技术。Nginx作为轻量级高性能Web服务器,与Keepalived结合,可轻松实现高可用负载均衡集群(HA+LB...
- 云原生(十五) | Kubernetes 篇之深入了解 Pod
-
深入了解Pod一、什么是PodPod是一组(一个或多个)容器(docker容器)的集合(就像在豌豆荚中);这些容器共享存储、网络、以及怎样运行这些容器的声明。我们一般不直接创建Pod,而是...
- 云原生(十七) | Kubernetes 篇之深入了解 Deployment
-
深入了解Deployment一、什么是Deployment一个Deployment为Pods和ReplicaSets提供声明式的更新能力。你负责描述Deployment中的目标状...
- 深入理解令牌桶算法:实现分布式系统高效限流的秘籍
-
在高并发系统中,“限流”是保障服务稳定的核心手段——当请求量超过系统承载能力时,合理的限流策略能避免服务过载崩溃。令牌桶算法(TokenBucket)作为最经典的限流算法之一,既能控制请求的平...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)