当前位置: 首页 > news >正文

12.Python模块:模块中的__all__、模块制作、打包模块、模块安装与使用

在 Python 中,模块是一个包含 Python 代码的文件。模块可以包含函数、类和变量,也可以包括可执行的代码。Python提供了一套强大的模块系统,支持模块的制作、打包、安装和使用。接下来,我们将详细介绍 __all__、模块制作、打包模块以及如何安装和使用模块。

1. __all__ 变量

__all__ 是一个特殊的变量,用于定义在 from module import * 语句中,哪些对象是可以被导入的。如果模块中定义了 __all__,只有 __all__ 列表中的内容会被导入,其它未列出的内容将无法被 from module import * 导入。

示例:
# module.py
__all__ = ['func1', 'var1']def func1():print("func1 called")def func2():print("func2 called")var1 = 10
var2 = 20
# main.py
from module import *func1()  # 正常调用
func2()  # NameError: name 'func2' is not defined

在上面的例子中,func2var2 并没有被 __all__ 包含,因此它们无法通过 from module import * 进行导入。func1var1 被列入 __all__,所以可以正常导入。

2. 模块制作

一个 Python 模块就是一个包含 Python 代码的文件,通常以 .py 后缀保存。模块可以包含函数、类、变量以及可执行代码。模块是 Python 中代码复用和组织的基本单元。

示例:

创建一个简单的模块 math_utils.py,它包含两个函数:加法和减法。

# math_utils.py
def add(a, b):return a + bdef subtract(a, b):return a - b
使用该模块:
# main.py
import math_utilsresult1 = math_utils.add(5, 3)
result2 = math_utils.subtract(5, 3)print(result1)  # 输出 8
print(result2)  # 输出 2

你可以将任何 Python 文件视为模块,只要它有 .py 后缀。

3. 打包模块

Python 的模块可以通过打包成库或者包进行分发。打包模块可以通过 setup.py 文件实现。以下是打包一个简单的模块的基本步骤。

3.1 创建项目目录结构

假设我们有以下目录结构:

my_module/├── my_module/│   ├── __init__.py│   ├── add.py│   └── subtract.py├── setup.py└── README.md
  • my_module/ 目录是我们模块的根目录。
  • my_module/__init__.py 用于导入包中的内容。
  • setup.py 是安装该模块所需的打包文件。
3.2 创建 __init__.py 文件
# my_module/__init__.py
from .add import add
from .subtract import subtract
3.3 创建 setup.py 文件

setup.py 文件是用来描述打包信息并安装模块的。下面是一个基本的 setup.py 文件:

# setup.py
from setuptools import setup, find_packagessetup(name='my_module',version='0.1',packages=find_packages(),install_requires=[],  # 如果有依赖包,可以在此列出description='A simple math module',long_description=open('README.md').read(),author='Your Name',author_email='your_email@example.com',url='https://example.com/my_module',
)
3.4 安装模块

在命令行中,切换到项目目录并运行以下命令来安装模块:

python setup.py install

或者,如果你希望在开发模式下安装该模块(以便修改后自动更新),可以使用:

pip install -e .
3.5 使用打包的模块

安装后,你可以在任何 Python 程序中使用该模块:

# 使用打包的模块
from my_module import add, subtractprint(add(1, 2))  # 输出 3
print(subtract(5, 3))  # 输出 2

4. 模块安装与使用

4.1 安装第三方模块

Python 中的第三方模块可以通过 pip 来安装。比如,安装常用的第三方库 requests

pip install requests

安装完成后,你就可以在 Python 程序中导入并使用它:

import requestsresponse = requests.get('https://www.example.com')
print(response.text)
4.2 安装本地模块

如果你有一个自定义的本地模块,可以将模块文件所在的路径添加到 sys.path 中,或者将模块所在的目录放到环境变量中。

import sys
sys.path.append('/path/to/your/module')import my_module  # 导入本地模块
4.3 使用虚拟环境

为了避免多个 Python 项目之间的依赖冲突,建议使用虚拟环境。你可以使用 venv 来创建虚拟环境。

4.3.1 创建虚拟环境

确保你的计算机已经安装了Python 3.3或更高版本。打开命令行工具,进入你希望创建虚拟环境的目录,执行以下命令:

python -m venv myenv

或如果你的系统上使用的是python3命令:

python3 -m venv myenv

其中,myenv是你要创建的虚拟环境的名字。执行后,Python会在当前目录下创建一个名为myenv的文件夹,里面包含了虚拟环境的所有文件。

4.3.2 激活虚拟环境
  • Windows系统
myenv\Scripts\activate
  • macOS/Linux系统
source myenv/bin/activate

激活虚拟环境后,命令行提示符通常会发生变化,显示虚拟环境的名称,例如(myenv)$,表示当前已经进入虚拟环境。

4.3.3 安装依赖包

在虚拟环境激活后,可以使用pip来安装Python包。所有安装的包只会作用于该虚拟环境,不会影响全局的Python环境。例如,安装requests包:

pip install requests
4.3.4 查看已安装的库

可以使用以下命令查看当前虚拟环境中已安装的库:

pip list
4.3.5 停用虚拟环境

完成工作后,如果你希望退出虚拟环境,可以使用以下命令:

deactivate
4.3.6 导出与安装依赖列表
  • 导出依赖列表:在虚拟环境激活的状态下,执行以下命令可以将当前虚拟环境中的所有依赖包写入到requirements.txt文件中。
pip freeze > requirements.txt
  • 安装依赖包:当在另一环境中需要安装相同的依赖包时,进入虚拟环境后,执行以下命令就能安装requirements.txt中列出的所有依赖包。
pip install -r requirements.txt

5. 总结

  • __all__: 控制在 from module import * 中导入哪些对象。
  • 模块制作: 创建一个 .py 文件并在其中编写代码,即可创建一个模块。
  • 模块打包: 使用 setup.pysetuptools 来打包模块并进行分发。
  • 模块安装与使用: 使用 pip 安装第三方模块,或者安装自定义模块并将其导入到程序中。

相关文章:

12.Python模块:模块中的__all__、模块制作、打包模块、模块安装与使用

在 Python 中,模块是一个包含 Python 代码的文件。模块可以包含函数、类和变量,也可以包括可执行的代码。Python提供了一套强大的模块系统,支持模块的制作、打包、安装和使用。接下来,我们将详细介绍 __all__、模块制作、打包模块…...

Socket通信端口绑定的逻辑实现

在实现网络通信时,一个 Socket 需要维护输入端与输出端的 IP 地址和端口号,同时也需要输入与输出字节缓冲区: 输入端与输出端的 IP 地址和端口号 作用 标识通信端点:IP 地址用于标识网络中的设备,端口号用于标识设备…...

在freertos中,中断优先级和任务优先级之间的关系和使用方法

中断优先级和任务优先级如何匹配?任务优先级不同任务之间该用多高的优先级?中断优先级不同中断中该用多高的优先级?中断优先级和任务优先级设置时,怎样设置可以让任务在调度时屏蔽中断?怎样设置可以让任务在调度时&…...

解锁摄影潜能:全面解析相机镜头的选择与使用逻辑

目录 一、镜头分类:从焦距到用途的底层逻辑 (一)按焦距和视角分类(一级分类) (二)按特殊用途分类(一级分类) 二、参数解码:超越 “光圈越大越好” 的思维定…...

java项目之直销模式下家具工厂自建网站源码(ssm+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的直销模式下家具工厂自建网站源码。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 直销模式下家具…...

CNN-BiLSTM卷积神经网络双向长短期记忆神经网络多变量多步预测,光伏功率预测

代码地址:CNN-BiLSTM卷积神经网络双向长短期记忆神经网络多变量多步预测,光伏功率预测 CNN-BiLSTM卷积神经网络双向长短期记忆神经网络多变量多步预测 一、引言 1.1、研究背景和意义 光伏功率预测在现代电力系统中占有至关重要的地位。随着可再生能源…...

grid网格布局中实现父盒子比较大,子元素顶部对齐

css布局中使用grid布局,父盒子的高度是1000px,每个子元素高度是100px,现在有三个子元素,如何实现每行显示两个,并且子元素都顶部对齐?如图所示的效果。 grid布局文档:grid - CSS:层…...

P4814 [CCO 2014] 国王格鲁夫

题目描述 本题译自 CCO 2014 Day1 T2「King Gruff」 狼国王格鲁夫统治着一个居住着可爱的狐狸的繁荣、快乐的领地。对狐狸们来说,不幸的是,他根本不是一个好国王,而且还想让他们的生活过得很惨。 他的国家有 N 个城市,由 M 条路连接,第 i 条路可以让你从城市 Xi​ 走到…...

[QMT量化交易小白入门]-二十二、deepseek+cline+vscode,让小白使用miniQMT量化交易成为可能

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通&a…...

吃瓜教程Day1笔记

主要内容: 1. 什么是机器学习以及 2. 机器学习的相关数学符号,为后续内容作铺垫,并未涉及复杂的算法理论, 因此阅读本章时只需耐心梳理清楚所有概念和数学符号即可。 3. “模型评估与选择” 是在模型产出以后进行的下游工作&…...

在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择

读取 Excel 文件的库 NPOI 用途:可以读取和写入 .xls 和 .xlsx 文件。特点:无需安装 Microsoft Office,支持简单的 Excel 操作,如格式化、公式、图表等。 EPPlus 用途:主要用于 .xlsx 格式(Excel 2007 及以…...

IntelliJ IDEA 安装与使用完全教程:从入门到精通

一、引言 在当今竞争激烈的软件开发领域,拥有一款强大且高效的集成开发环境(IDE)是开发者的致胜法宝。IntelliJ IDEA 作为 JetBrains 公司精心打造的一款明星 IDE,凭借其丰富多样的功能、智能精准的代码提示以及高效便捷的开发工…...

SkyWalking 10.1.0 实战:从零构建全链路监控,解锁微服务性能优化新境界

文章目录 前言一、集成SkyWalking二、SkyWalking使用三、SkyWalking性能剖析四、SkyWalking 告警推送4.1 配置告警规则4.2 配置告警通知地址4.3 下发告警信息4.4 测试告警4.5 慢SQL查询 总结 前言 在传统监控系统中,我们通过进程监控和日志分析来发现系统问题&…...

1. 构建grafana(版本V11.5.1)

一、grafana官网 https://grafana.com/ 二、grafana下载位置 进入官网后点击downloads(根据自己的需求下载) 三、grafana安装(点击下载后其实官网都写了怎么安装) 注:我用的Centos,就简略的写下我的操作步…...

STM32-知识

一、Cortex-M系列双指针 Cortex-M系列的MSP与PSP有一些重要的区别,双指针是为了保证OS的安全性和稳健性。本质上,区别于用户程序使用PSP,操作系统和异常事件单独使用一个MSP指针的目的,是为了保证栈数据不会被用户程序意外访问或…...

SearchBar组件的功能与用法

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"Material3中的IconButton"相关的内容,本章回中将介绍SearchBar组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…...

解决VsCode的 Vetur 插件has no default export Vetur问题

文章目录 前言1.问题2. 原因3. 解决其他 前言 提示: 1.问题 Cannot find module ‘ant-design-vue’. Did you mean to set the ‘moduleResolution’ option to ‘node’, or to add aliases to the ‘paths’ option? Module ‘“/xxx/xxx/xxx/xxx/xxx/src/vie…...

游戏引擎学习第96天

讨论了优化和速度问题,以便简化调试过程 节目以一个有趣的类比开始,提到就像某些高端餐厅那样,菜单上充满了听起来陌生或不太清楚的描述,需要依靠服务员进一步解释。虽然这听起来有些奇怪,但实际上,它反映…...

【项目总结】易到家家政服务平台 —— 派单调度(7)

派单调度需求分析 在抢单业务中,用户下单成功由服务人员或机构进行抢单,抢单成功服务人员上门服务,除了抢单业务系统还设计了派单业务,由系统根据用户订单的特点自动派给合适的服务人员。 流程如下: 首先获取待分配…...

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 0基础…...

Flink-DataStream API

一、什么样的数据可以用于流式传输 Flink的DataStream API 允许流式传输他们可以序列化的任何内容。Flink自己的序列化程序用于 基本类型:即字符串、长、整数、布尔值、数组复合类型:元组、POJO和Scala样例类 基本类型我们已经很熟悉了,下…...

chromium-mojo

https://chromium.googlesource.com/chromium/src//refs/heads/main/mojo/README.md 相关类:https://zhuanlan.zhihu.com/p/426069459 Core:https://source.chromium.org/chromium/chromium/src//main:mojo/core/README.md;bpv1;bpt0 embedder:https://source.chr…...

Sourcetree 安装教程(附下载链接)

一、介绍 Sourcetree是一款免费的Git桌面工具,可以简化我们与Git之间敲代码的过程,使得我们可以更快的管理代码版本。 虽然现在各大IDE都内置Git功能,但在一些没有内置Git的IDE情况下,使用Sourcetree进行Git下的代码管理是一件非…...

NIO 和 AIO 的区别?

目录 设计理念 工作模式 适用场景 性能特点 NIO(Non - blocking I/O,非阻塞 I/O)和 AIO(Asynchronous I/O,异步 I/O)都是 Java 中用于实现高效 I/O 操作的机制,它们在设计理念、工作模式、适用场景等方面存在明显区别,以下为你详细介绍: 设计理念 NIO:NIO 基于事…...

Python中10个常用的接口自动化装饰器

更多Python学习内容:ipengtao.com 装饰器(Decorators)是Python中一种强大的编程工具,它们用于修改或增强函数或方法的行为。在接口自动化测试中,装饰器可以起到简化代码、提高代码可维护性和可重用性的作用。本文将介…...

Odoo17 0.1常见的QWeb 模板语言指令的详细总结

Odoo QWeb 模板语言提供了许多指令 (directives) 来增强 HTML 模板的功能,使其能够动态地展示数据、进行条件判断、循环遍历、以及实现更复杂的逻辑。 这些指令都以 t- 开头作为属性添加到 HTML 标签上。 以下是一些常见的 Odoo QWeb 模板语言指令的详细总结&#…...

螺旋矩阵 II

螺旋矩阵 II 一、题目描述 给定一个正整数 n,请你生成一个包含 1 到 n^2 所有元素的 n x n 正方形矩阵,元素顺序按顺时针的方式进行螺旋排列。 示例 1:输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:…...

Object:所有类的超类

定义:所有类的超(父)类。 Object有下面几个常用的方法: equals():比较内存地址是否指向相同getclass():获取类的信息--反射领域hashcode 散列码--根据地址生成wait -- 线程进入等待状态,让出CPU和锁notify -- 唤醒等待…...

LabVIEW 开发航天项目软件

在航天项目软件开发中,LabVIEW 凭借其图形化编程优势被广泛应用。然而,航天项目的高可靠性、高精度及复杂环境适应性要求,使得在使用 LabVIEW 开发时,有诸多关键要点需要特别关注。本文将详细分析在开发航天项目软件时需要重点注意…...

docker部署superset并连接华为MRS hive数据库

下载构建源码 这个项目实现了汉化和开箱即用,感谢大佬 GitHub - lutinglt/superset-zh: Superset 汉化, Superset 中文版 替换国内apt源 查看debian版本,不同版本替换apt源的内容不同 cat /etc/debian_version我这里是11.9版本 apt源文件sources.li…...

在 Flutter 实现下拉刷新、上拉加载更多和一键点击回到顶部的功能

在 Flutter 中,实现下拉刷新、上拉加载更多和一键点击回到顶部的功能,通常会结合使用 RefreshIndicator、ListView 和 ScrollController 来实现这些交互效果。下面分别介绍如何实现这些功能。 1. 下拉刷新 Flutter 提供了 RefreshIndicator 组件来实现…...

Linux常见命令——系统定时任务

文章目录 crontab 服务管理crontab -e :编辑crontab 定时任务crontab -l 查看crontab 任务crontab -r 删除当前用户所有的crontab 任务 crontab 服务管理 systemctl status crond该系统进程是开机自启动,并且被打开了,可以使用。 crontab -e :编辑cr…...

国产编辑器EverEdit - 书签功能介绍

1 书签 1.1 应用场景 当用户在文档中多处进行编辑时,为了方便在多个编辑位置跳转,使用书签功能可以方便记录各个位置。 1.2 使用方法 1.2.1 切换书签 设置或取消光标所在行的书签 方法1:选择主菜单查找 -> 书签 -> 切换书签 方法2&…...

【Hadoop】大数据权限管理工具Ranger2.1.0编译

目录 ​编辑一、下载 ranger源码并编译 二、报错信息 报错1 报错2 报错3 报错4 一、下载 ranger源码并编译 ranger官网 https://ranger.apache.org/download.html 由于Ranger不提供二进制安装包,故需要maven编译。安装其它依赖: yum install gcc …...

推荐算法实践:movielens数据集

MovieLens 数据集介绍 MovieLens 数据集是由明尼苏达大学的GroupLens研究小组维护的一个广泛使用的电影评分数据集,主要用于推荐系统的研究。该数据集包含用户对电影的评分、标签以及其他相关信息,是电影推荐系统开发与研究的常用数据源。 数据集版本 …...

基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试

基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试 1. 引言 在计算机视觉领域,图像分类是一个经典的任务。本文将详细介绍如何使用 PyTorch 实现一个树叶分类任务。我们将从数据准备开始,逐步构建模型、训练模型,并在测试…...

生成式语言模型技术全解析

一、引言 在人工智能领域,生成式语言模型(Generative Language Models,GLMs)无疑是近年来最为耀眼的明星。从早期的简单语言模型到如今如DeepSeek、Qwen 2.5 Max等具有强大能力的先进模型,它们在自然语言处理的各个方…...

香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。

简介: 亮点直击 将电影镜头设计引入图像到视频的合成过程中。 推出了MotionCanvas,这是一种简化的视频合成系统,用于电影镜头设计,提供整体运动控制,以场景感知的方式联合操控相机和对象的运动。 设计了专门的运动条…...

bazel 小白理解

Bazel命令是用于构建和测试软件项目的一个强大工具,尤其适用于大规模和多语言的软件项目。对于小白来说,可以这样理解Bazel及其命令: Bazel的基本概念 构建系统:Bazel是一个构建系统,它的主要任务是自动化地编译和链…...

基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能

一、介绍 蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【“香菇(Agaricus)”, “毒鹅膏菌(Amanita)”, “牛肝菌&…...

基于 STM32 平台的音频特征提取与歌曲风格智能识别系统

标题:基于 STM32 平台的音频特征提取与歌曲风格智能识别系统 内容:1.摘要 摘要:本文介绍了一种基于 STM32 平台的音频特征提取与歌曲风格智能识别系统。该系统通过对音频信号进行特征提取和分析,实现了对歌曲风格的自动识别。在特征提取方面&#xff0c…...

AUTOGPT:基于GPT模型开发的实验性开源应用程序; 目标设定与分解 ;;自主思考与决策 ;;信息交互与执行

目录 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序目标设定与分解自主思考与决策信息交互与执行AUTOGPT是一款基于GPT模型开发的实验性开源应用程序 目标设定与分解 自主思考与决策 信息交互与执行 AUTOGPT是一款基于GPT模型开发的实验性开源应用程序,它能让大语言模…...

DeepSeek底层揭秘——知识图谱与语料库的联邦学习架构

目录 1. 知识图谱与语料库的联邦学习架构 2. 技术要素 3. 技术难点与挑战 4. 技术路径 5. 应用场景 6. 最新研究与技术进展 7. 未来趋势 8. 实际案例 猫哥说 1. 知识图谱与语料库的联邦学习架构 (1) 定义 “知识图谱与语料库的联邦学习架构”是一种结合知识图谱&…...

MVVM设计模式

‌MVVM(Model-View-ViewModel)是一种软件设计模式,MVVM模式由三个主要部分组成: ‌Model(模型)‌:负责管理应用程序的业务逻辑和数据。它不关心UI如何展示数据,主要负责与服务器通信和数据处处…...

5.实时推荐系统的设计与实现

接下来我们将学习实时推荐系统的设计与实现。实时推荐系统需要处理大规模数据,并在用户交互时提供即时的推荐结果。这一课我们将介绍以下内容: 实时推荐系统的基本概念实时推荐系统的架构设计实时推荐系统的关键技术实践示例 1. 实时推荐系统的基本概念…...

分层解耦-ioc引入

内聚: 软件中各个功能模块内部的功能联系。 耦合: 衡量软件中各个层/模块之间的依赖、关联的程度。 软件设计原则: 高内聚低耦合。...

Docker安装常用软件说明

1.总体步骤 2.安装tomcat docker run -d -p 8080:8080 --name tomcat1 tomcat:11.0.8 访问tomcat猫首页 出现404 这是正常情况 Docker 默认采用的是 NAT 网络模式,所以会自动创建 IPtable 规则并自动开放端口,所以无需考虑防火墙问题 新版Tomcat已经…...

陶氏环面包络减速机:为工业视觉检测注入“精准动力”!

在工业4.0时代,视觉检测技术已成为智能制造的核心环节。无论是精密电子元件的检测,还是汽车零部件的质量把控,视觉检测系统都需要极高的精度、稳定性和响应速度。而这一切,离不开一颗强大的“心脏”——陶氏环面包络减速机。 一、…...

标准日本语 导学

新版标准日本语-初级 结构 初级 上 初级 下 每章结构 教学方法...

vscode怎么更新github代码

vscode怎么更新github代码 打开终端: 在 VS Code 中,使用快捷键 Ctrl (Mac 上是 Cmd) 打开终端。 导航到项目目录: 确保你当前所在的终端目录是你的项目目录。如果不是,可以使用 cd 命令导航到项目目录,例如&#xf…...