Python-模块、包和发布模块

news2024/10/5 18:30:17

1.模块

1.1模块的概念

模块python程序架构的一个核心概念

  • 每一个以扩展名.py结尾的python源代码文件都是一个模块

  • 模块名同样也是一个标识符,需要符合标识符的命名规则

  • 在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具

  • 模块就好比工具包,要想使用这个工具包中的工具,就需要先导入这个模块

1.2模块的导入方式

1.2.1 import导入

import 模块名1,模块名2

提示:再导入模块时,每个导入应该独占一行

import 模块名1
import 模块名2

导入之后

  • 通过 模块名.使用模块提供的工具 -- 全局变量、函数、类

使用as指定模块的别名

如果模块的名字太长,可以使用as指定模块的名称,以方便在代码中的使用

import 模块名1 as 模块别名

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

1.2.2 from...import导入

  • 如果希望从某一个模块中,导入部分工具,就可以使用from...import的方式

  • import 模块名 一次性把模块中所有工具全部导入,并且通过 模块名/别名访问

# 从 模块 导入 某一个工具
from 模块名1 import 工具名

导入之后

  • 不需要通过 模块名.

  • 可以直接使用 模块提供的工具 -- 全局变量、函数、类

注意

如果两个模块,存在同名的函数,那么 后导入模块的函数,会覆盖掉先导入的函数

  • 开发时import代码应该统一写在代码的顶部,更容易及时发现冲突,一旦发现冲突,可以使用 as关键字 给其中一个工具起一个别名

1.2.3 from...import *(了解)

# 从 模块 导入 所有工具
from 模块名1 import *

注意

这种方式不推荐使用,因为函数重名并没有任何提示,出现问题不好排查

1.3模块的搜索顺序(扩展)

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

  • 搜索当前目录指定模块名的文件,如果有就直接导入,如果没有,再搜索系统目录

在开发时,给文件起名,不要和系统的模块文件重名

python中每一个模块都有一个内置属性 __file__可以查看模块的完整路径

示例

import random
print(random.__file__)
# 生成一个 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__

# 导入模块
# 定义全局变量
# 定义类
# 定义函数

#在代码的最下方
def main():
    # ...
    pass

# 根据 __name__ 判断是否执行下方代码
if __name__ == "__main__"
    main()

2.包(Package)

概念

  • 是一个包含多个模块特殊目录,目录下有一个特殊的文件 __init__.py,包名的命名方式和变量名一致,小写字母+_

  • __init__.py的建立方式

利用Directory建立,需要自己新建__init__.py文件

利用Pyhon.Package建立包,会自动产生__init__.py文件

好处

  • 使用 import 包名 可以一次性导入所有的模块

案例演练

  • 新建一个 hm_message 的包

  • 在目录下,新建两个文件 send_messagereceive_message

  • send_message文件中定义一个send函数

  • receive_message文件中定义一个receive函数

  • 在外部直接导入 hm_message的包

__init__.py

  • 要在外界使用中的模块,需要在__init__.py中指定对外界提供的模块列表

# 从 当前目录 导入 模块列表
from  . import send_message
from  . import receive_message

3.发布模块(了解)

  • 如果希望自己开发的模块,分享给其他人,可以按照以下步骤操作

3.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"])

有关字典参数的详细信息,可以参阅官方网站:

https://docs.python.org/2/distutils/apiref.html

  • 构建模块

$ python3 setup.py build
  • 生成发布压缩包

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

$ python3 setup.py sdist

3.2安装模块

$ tar zxvf hm_message-1.0.tar.gz
$ sudo python3 setup.py install

卸载模块

直接从安装目录下,把安装模块的目录删除就可以

$ cd  /root/anaconda3/lib/python3.9/site-packages/
sudo rm -rf hm_message*

3.3 pip安装第三方模块

  • 第三方模块通常是指由 知名的第三方团队开发的 并且被程序员广泛使用的python包/模块

  • 例如 pygame就是一套非常成熟的游戏开发模块

  • pip是一个现代的、通用的python包管理工具

  • 提供了对python包的查找、下载、安装、卸载等功能

安装和卸载命令如下:

sudo是指要以root的身份进行执行

# 将模块安装到 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

代码见:https://github.com/x45w/python_mokuai_bao_fabumokuai.git

内容总结于:https://space.bilibili.com/37974444

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

世界坐标系->相机坐标系详细推导

基变换 理论部分 在n维的线性空间中,任意n个线性无关的向量都可以作为线性空间的基,即空间基不唯一。对于不同的基,同一个向量的坐标一般是不同的。因为在计算机图形学中,主要研究三维的空间,所以可以简化问题倒三维…

Hi3861鸿蒙物联网项目实战:智能测距仪

华清远见FS-Hi3861开发套件,支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能,开发板板载资源丰富,包括传感器、执行器、NFC、显示屏等,同时还配套丰富的拓展模块。开发板配套丰富的学习资料,包括全套开发教程…

真假流量卡区别,一篇文章教你怎么区分流量卡和物联卡!

真假流量卡区别,小编教你怎么区分流量卡和物联卡,近年来,市面上的流量卡种类繁多,其中不乏有一些虚假的、有套路的套餐,那么,我们如何辨别流量卡的正规性呢,接下来,跟着小编一块来了…

114.简单的动态切换app的图标,两种方式

第一种方式&#xff1a; 1.第一步 通过activity-alias别名实现&#xff0c;manifest 这里写的是一个默认的图标Default和一个需要切换的图标Test&#xff0c;以及一个默认的首页面HomeActivity&#xff1a; <!-- 默认的图标--> <activity-aliasandroid:name".ac…

基于java SSM springboot+redis网上水果超市商城设计和实现以及文档

基于java SSM springbootredis网上水果超市商城设计和实现以及文档 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留…

java8中stream流式编程的使用大全

一、概述 Stream流操作是Java 8提供一个重要新特性&#xff0c;它允许开发人员以声明性方式处理集合&#xff0c;其核心类库主要改进了对集合类的API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中&#xff0c;能 让代码更加简…

Node.js教程笔记(四)数据库与身份认证

学习目标 1、能够知道如何配置Mysql数据库环境 2、能够认识并使用常见的SQL语句操作数据库 3、能够在Express中操作Mysql数据库 4、能够了解Session的实现原理 5、能够了解JWT的实现原理 目录 1、数据库的基本概念 2、安装并配置Mysql 3、Mysql的基本使用 4、在Expre…

全球数十万客户选择亚马逊云科技数据库服务构建自己的应用

日前&#xff0c;全球市场分析机构Gartner发布《2022云数据库管理系统魔力象限》报告&#xff08;2022 Gartner Magic Quadrant™ for Cloud Database Management Systems&#xff09;。Gartner数据显示&#xff0c;整个数据库管理系统市场在2021年实现强劲增长22.3%&#xff0…

【五六七人口普查】我国省市两级各行业门类人口及三次产业人口比重

人口数据是我们在各项研究中最常使用的数据&#xff01;之前我们分享过第七次人口普查&#xff08;简称七普&#xff09;的数据&#xff01;很多小伙伴拿到数据后都反馈数据非常好用&#xff0c;同时很多小伙伴咨询有没有前面几次人口普查的数据&#xff0c;这样方便做人口变化…

【Java】final关键字和final的四种用法

final定义 final翻译成中文的意思是 “最终” &#xff0c; 它是java当中的一个关键字&#xff0c;使用final修饰的对象不允许修改或替换其原始值或定义。 假如当final修饰一个类的时候&#xff0c;是不能被其他类继承的。 final的四种用法 修饰类修饰方法修饰变量修饰参数 1.…

会话保持技术:cookie、session

目录 1.概述 2.cookie 3.session 1.概述 会话保持技术的出现是因为HTTP 是一个无状态的协议&#xff0c;这一次请求和上一次请求是没有任何关系的&#xff0c;互相无法感知&#xff0c;上一次请求干了什么&#xff1f;这一次请求完全不知道&#xff0c;会话保持技术就是为了…

Python协程asyncio异步编程结合uvloop性能提升

asyncio介绍 和我们以前常用的gevent模块相似&#xff0c;asyncio模块也是在Python中实现协程的模块区别是gevent是第三方库&#xff0c;通过greenlet实现协程&#xff0c;遇到I/O自动切换&#xff08;自动挡&#xff09;asyncio是Python 3.4版本引入的标准库&#xff0c;asyc…

GitHub访问问题与FastGithub下载及使用(详细篇)

前言 &#x1f4dc; “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴 目录 前言 FastGithub的介绍 FastGithub的下载 FastGithub的安装及…

23种设计模式之综合实战篇

23种设计模式之综合实战篇1. 设计模式概述1.1 什么是设计模式1.2 设计模式的好处2. 设计原则分类3. 详解3.1 单一职责原则3.2 开闭原则3.3 里氏代换原则3.4 依赖倒转原则3.5 接口隔离原则3.6 合成复用原则3.7 迪米特法则4. Awakening1. 设计模式概述 我们的软件开发技术也包括一…

微刊:做了很多的16S三代测序,文章可以这样写~

三代的黄金时代已经来临&#xff01;在扩增子方面与二代相比其优势明显&#xff1a;1&#xff1a;获得的序列更长&#xff0c;信息量更多更准确&#xff01;2;鉴定高精准&#xff0c;“种”水平物种鉴定中实现了大幅提升。3:PCR扩增无GC偏好性&#xff0c;数据更准确。4:V1-V9全…

MySQL多表操作的外键约束

目录 一.多表关系 一对一关系 一对多/多对一关系 多对多关系 二.外键约束 特点 创建外键约束 方式1-在创建表时设置外键约束 方式2-在创建表时设置外键约束 在外键约束下的操作 1.数据插入 2.删除数据 3.删除外键约束 外键约束-多对多关系 操作 一.多表关系 MySQL多表…

51单片机学习笔记-12LCD1602液晶屏

12 LCD1602液晶屏 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 12.1 LCD1602介绍 LCD1602&#xff08;Liquid Crystal Display&#xff09;…

【Java 数据结构】实现一个二叉搜索树

目录 1、认识二叉搜索树 2、实现一个二叉搜索树 2.1 成员变量 2.2 insert 方法 2.3 search 方法 2.4 remove 方法(重点) 3、二叉搜索树总结 1、认识二叉搜索树 从字面上来看&#xff0c;它只比二叉树多了搜索两个字&#xff0c;我们回想一下&#xff0c;如果要是在二…

linux性能优化-CPU上下文切换

疑问&#xff1a;进程在竞争CPU时并没有真正运行&#xff0c;为什么还会导致系统的负载升高&#xff1f; 因为存在CPU上下文切换。 linux系统说明 Linux是一个多任务操作系统&#xff0c;它支持远大于CPU数量的任务同时运行。当然&#xff0c;这些任务实际上并不是真的在同时…

pytorch-lightning中使用wandb实现超参数搜索

由于最近涉及下游任务微调&#xff0c;预训练任务中的框架使用的是pytorch-lightning&#xff0c;使用了典型的VLP(vision-language modeling)的训练架构&#xff0c;如Vilt代码中&#xff1a;https://github.com/dandelin/ViLT&#xff0c;这类架构中只涉及到预训练&#xff0…