python中的包和模块

news2024/12/23 13:43:13

目录

一、包与模块

二、第三方包的安装

2.1 pip install

2.2使用 curl + 管道

2.3其他安装方法

三、导入单元的构成

3.1pip的使用

四、模块的缓存


一、包与模块

Python 中除了函数库以外,还有非常多且优秀的第三方库、包、模块。

  • 模块Module:以 .py 为后缀的文件,称之为 模块
  • 包Package:即文件夹,传统包里有一个 __init__.py 文件。可以为空文件,但一定要有该文件,它是包的标志性文件,在需要情况下可以在里面进行一些包的初始化工作。
  • 库:一定功能的代码集合

库->包->模块,是从大到小的层级关系:

  • 库:一个库可能由多个包和模块组成

  • 包:一个包可能由多个模块组成

  • 模块:一堆函数、类、变量的集合

(1)模块

假设有一个demo.py文件(也即是模块),代码如下:

name="Python编程时光"
print("导入成功")

使用 import 语句就可以导入demo模块,导入之后,就可以使用 模块名.变量名 的方式访问这个变量。

import demo    #执行此语句就会输出:导入成功

print(demo.name)  # 输出:Python编程时光

当该模块被导入后,会在当前目录下产生一个 叫做 __pycache__ 的缓存文件夹。

  •  导入模块的时候,Python解释器会把模块的代码编译成字节码,并放入 __pycache__文件夹中。
  • 再次运行的话,如果被调用的模块未发生改变,那就直接跳过编译这一步,直接去__pycache__文件夹中去运行相关的 *.pyc 文件,大大缩短了项目运行前的准备时间。

(2)包

传统包里的 __init__.py 可以为空文件,但一定要有该文件,它是包的标志性文件,在需要情况下可以在里面进行一些包的初始化工作。

 一个包里可以有多个模块,比如上面的 foo.py 和 bar.py 都属于 demo 模块

import demo.foo    #方式一
import demo.bar

from demo import foo       #方式二

当我们 import 导入模块或包时,Python 提供两种导入方式:

  • 相对导入(relative import ):from . import B 或 from ..A import B,其中.表示当前模块,..表示上层模块

  • 绝对导入(absolute import):import foo.bar 或者 from foo import bar(标准推荐)

二、第三方包的安装

2.1 pip install

pip 是最主流的包管理方案,使用 pip install xxx 就可以从 PYPI 上搜索并安装 xxx (如果该包存在的话)。

一些安装示例:pip的更多使用方法

pip install requests

# 前提你得保证你已经下载 pkg 包到 /local/wheels 目录下
pip install --no-index --find-links=/local/wheels pkg

# 所安装的包的版本为 2.1.2
pip install pkg==2.1.2

# 所安装的包必须大于等于 2.1.2
pip install pkg>=2.1.2

# 所安装的包必须小于等于 2.1.2
pip install pkg<=2.1.2

2.2使用 curl + 管道

一些第三方工具包提供的安装方法,是直接使用 curl 配置管道来安装,比如上面提到的 poetry 就可以用这种方法安装。

 curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

2.3其他安装方法

第三方包的其他安装方式

三、导入单元的构成

导入的单元可以是:模块(单个文件)、包、变量、库等

模块:类似 *.py,.pyc, *.pyd ,.so,*.dll 这样的文件,是 Python 代码载体的最小单元

Python 提供两种导入方式:

  • 相对导入:from . import B 或 from ..A import B,其中.表示当前模块,..表示上层模块(python2.6之前的版本常使用的方式)

  • 绝对导入:import foo.bar 或者 from foo import bar(python2.6之后的版本常使用的方式)

导入的注意事项:

  • import语句应该分行写入,避免用逗号分隔,出现一行多个的情况
  • 绝对导入:如:from foo.bar import test
  • import 放文件头部,置于模块说明及docstring之后,全局变量之前
  • import导入顺序:内置模块、第三方库、本地模块

3.1pip的使用

(1)查询软件包

  1. 查看当前环境安装的所有软件包:pip list
  2. 查询 pypi 上含有某名字的包:pip search pkg
  3. 查询当前环境中可升级的包:pip list --outdated
  4. 查询一个包的详细内容:pip show pkg

(2)下载软件包

 (3)安装软件包

pip install 包名

  1. 指定版本安装:
# 所安装的包的版本为 2.1.2
pip install pkg==2.1.2

# 所安装的包必须大于等于 2.1.2
pip install pkg>=2.1.2

# 所安装的包必须小于等于 2.1.2
pip install pkg<=2.1.2
  1. 管理控制整个python环境的包版本 
# 导出依赖包列表
pip freeze >requirements.txt

# 从依赖包列表中安装
pip install -r requirements.txt

# 确保当前环境软件包的版本(并不确保安装)
pip install -c constraints.txt

(4)升级软件包

pip install --upgrade pkg

(5)配置文件

由于pip安装包时,默认使用pip官方源,经常会出现网络超时失败的情况,因此我们需要使用国内镜像源来解决:将镜像源配置到pip配置文件中,就省去了每次手动配置镜像源的麻烦:

查找配置文件:使用win+r 输入 %APPDATA% 进入用户资料文件夹,查看有没有一个 pip 的文件夹,若没有则创建pip文件夹,然后新建一个配置文件pip.ini。(镜像源可更换,选择速度较快的即可)

pip的配置文件(pip.ini):

[global]
time-out=60
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=tsinghua.edu.cn

(6)pip常用的命令:

参考链接:下图参考链接

3.2模块的缓存

重复导入相同的模块,不会执行多次,只会执行一次导入操作。因为 sys.modules 的存在,会扫描当前是否已经存在该模块。sys.modules 是一个字典(key:模块名,value:模块对象),它存放着在当前 namespace 所有已经导入的模块对象。

3.3源码包与二进制包

Python 包的分发可以分为两种:源码包、二进制包

  1. 源码包本质是压缩包,常见的格式有:(.zip)、(.tar.gz)、(.tar.bz)、(.tar.z)、(.tar)
  2. 二进制包省去了编译的过程,直接可解压安装,安装较快。但是不同平台变异的包不同,不通用。常见的格式有:egg(.egg)、wheel(.whl)

Wheel 的出现是为了替代 Egg,它的本质是一个zip包

 Wheel 和 Egg 的主要区别:

  • Wheel 有一个官方的 PEP427 来定义,而 Egg 没有 PEP 定义

  • Wheel 是一种分发格式,即打包格式。而 Egg 既是一种分发格式,也是一种运行时安装的格式,并且是可以被直接 import

  • Wheel 文件不会包含 .pyc 文件

  • Wheel 使用和 PEP376 兼容的 .dist-info 目录,而 Egg 使用 .egg-info 目录

  • Wheel 有着更丰富的命名规则。

  • Wheel 是有版本的。每个 Wheel 文件都包含 wheel 规范的版本和打包的实现

  • Wheel 在内部被 sysconfig path type 管理,因此转向其他格式也更容易

wheel 包可通过 pip 安装,需要先安装 wheel 模块,然后再使用 pip 的命令:

pip install wheel
pip wheel --wheel-dir=/local/wheels pkg

四、setup.py 的编写

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

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

相关文章

Python容器 之 字符串--定义

目录 1.字符串如何定义&#xff1f; 2.定义字符串时遇到特殊内容怎么处理&#xff1f; 1)字符串本身包含引号&#xff0c;如&#xff1a;定义字符串 Im 小明、他叫“小明”。 &#xff08;1&#xff09;如果字符串本身包含单引号,定义的时候不能使用 单引号。 &#xff08…

币界网讯,美国选择 Coinbase 进行数字货币托管

2024 年0 7 月 02 日。华盛顿特区美国法警局 (USMS) 宣布选择 Coinbase Prime 作为其“一级”数字资产的托管人和高级交易服务提供商&#xff0c;USMS这一具有里程碑意义的决定&#xff0c;反映了数字资产日益融入美国联邦司法程序的趋势。Coinbase 是世界排名前十的数字货币交…

解决微信能登陆,但打不开浏览器的WIFI连接问题

双击打开ipv4&#xff0c;改成自动获取 点击确定保存好 断网重新联网

头条系统-05-延迟队列精准发布文章-概述添加任务(db和redis实现延迟任务)、取消拉取任务定时刷新(redis管道、分布式锁setNx)...

文章目录 延迟任务精准发布文章 1)文章定时发布2)延迟任务概述 2.1)什么是延迟任务2.2)技术对比 2.2.1)DelayQueue2.2.2)RabbitMQ实现延迟任务2.2.3)redis实现 3)redis实现延迟任务4)延迟任务服务实现 4.1)搭建heima-leadnews-schedule模块4.2)数据库准备4.3)安装redis4.4)项目…

第十一章 路由器单臂路由配置

实验目标 掌握单臂路由器配置方法&#xff1b; 通过单臂路由器实现不同 VLAN 之间互相通信&#xff1b; 实验背景 某企业有两个主要部门&#xff0c; 技术部和销售部&#xff0c; 分处于不同的办公室&#xff0c; 为了安全和便于管理对两个部门的主机进行了 VLAN 的划分&#x…

ACM美国计算机协会简介及个人下载ACM文献途径

ACM美国计算机协会简介&#xff1a; ACM&#xff08;Association for Computing Machinery&#xff09; 创立于1947年&#xff0c; 是全球历史最悠久和最大的计算机教育、科研机构。ACM目前提供的服务遍及全球100多个国家&#xff0c;会员数超过9万名&#xff0c;涵盖工商业&a…

【力扣】赎金信

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 给你两个字符串…

商家转账到零钱开通教程及辅助开通手段详解

商家转账到零钱申请可以通过商家自行申请或者辅助开通手段代申请两种方式&#xff0c;如果自行申请难以过审&#xff0c;辅助开通代申请则成为降低商家时间成本和商户号风险的必要手段&#xff0c;以下从自助申请和辅助开通两种方式说说商家转账到零钱高效开通办法。 自行申请方…

产品经理-对产品经理的认识(1)

今天跟大家聊一下产品经理这个岗位的,产品经理是互联网岗位当中比较火的一个岗位,也是最接近CEO的岗位 产品经理岗位&#xff0c;技术门槛低&#xff0c;薪水和前景都很不错&#xff0c;又处于团队的核心位置 产品经理岗位没有完全相关的专业设置和清晰的学习路径&#xff0c;绝…

【C语言】文件的顺序读写

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 前言字符输入输出函数 - fgetc和fputc文本行输入输出函数 - fgets和fputs格式化输入输出函数 - fscanf和fprintf 前言 对文件数据的读写可以分为顺序…

10.优化算法之字符串

1.最长公共前缀 14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; class Solution {public static String longestCommonPrefix(String[] strs) {if(strsnull||strs.length0){return "";}int lengthstrs.length;for(int i0;i<strs[0].length();i){//第一…

FMEA培训如何助你成为工作领域的“稳中求胜”高手

在竞争激烈的职场环境中&#xff0c;每个人都渴望掌握一门能够让自己脱颖而出的技能。而FMEA&#xff08;失效模式与影响分析&#xff09;正是这样一门强大的工具&#xff0c;它不仅能够帮助我们识别并预防潜在的问题&#xff0c;还能提升工作效率&#xff0c;确保项目的顺利进…

从BeanFactory源码看Bean的生命周期

下图是我搜索“Spring Bean生命周期”找到的图片&#xff0c;来自文章——Spring Bean的生命周期 [](https://img2022.cnblogs.com/blog/1942408/202207/1942408-20220713150530777-1198523052.png) 下面&#xff0c;我们从AbstractAutowireCapableBeanFactory的源码中来分析…

无偏归一化自适应心电ECG信号降噪方法(MATLAB)

心电信号作为一种生物信号&#xff0c;含有大量的临床应用价值的信息&#xff0c;在现代生命医学研究中占有重要的地位。但心电信号低频、低幅值的特点&#xff0c;使其在采集和传输的过程中经常受到噪声的干扰&#xff0c;使心电波形严重失真&#xff0c;从而影响后续的病情分…

无人机企业需要什么资质?

无人机企业所需的资质主要可以分为几大类&#xff0c;以确保其合法、安全、高效地进行相关业务活动。以下是对这些资质的详细解释和归纳&#xff1a; 1. 基础企业资质&#xff1a; - 工商营业执照&#xff1a;这是企业合法经营的基本证书&#xff0c;所有企业都需要取得。无人…

查询 条件列值用notepad++批量添加单引号和逗号

参考&#xff1a;Notepad批量添加引号_notepad字符串统一加引号-CSDN博客 我需要批量修改数据表中某一列值指定的部分列&#xff0c;比如某个编号为CP0408242321001到CP0408242321101的条件。 我从数据表中把这个条件的所有编号复制出来了粘贴到了notepad里面。 如下图所示 从…

Softmax作为分类任务中神经网络输出层的优劣分析

Softmax作为分类任务中神经网络输出层的优劣分析 在深度学习领域&#xff0c;Softmax函数作为分类任务中神经网络的输出层&#xff0c;被广泛应用并展现出强大的优势。然而&#xff0c;任何技术都有其两面性&#xff0c;Softmax函数也不例外。本文将从多个角度深入分析Softmax…

大型语言模型的长期记忆能力--HippoRAG

在人工智能领域&#xff0c;特别是自然语言处理&#xff08;NLP&#xff09;中&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的长期记忆能力一直是研究的热点和难点。人类大脑能够在不断变化的环境中存储和更新大量知识&#xff0c;而现有的LLMs在预训练后整合新经验时…

高考志愿填报,优先选专业还是选学校?

高考后的学生&#xff0c;都会纠结选专业还是选学校了&#xff0c;这应该是每年都会出现的情况&#xff0c;其实专业和学校的关系就有点像是蛋糕和餐厅的关系&#xff0c;你到底想选一个美味的蛋糕还是选一个更好的餐厅呢&#xff1f;从某个角度来说&#xff0c;其实不管专业还…

QT学习积累——如何提高Qt遍历list的效率

目录 引出Qt遍历list提高效率显示函数的调用使用&与不使用&除法的一个坑 总结自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 引出 QT学习积累——如何提高Qt遍历list…