Python包和库

2023-11-04

2.3 包和库

2.3.1 包的概念

包是在模块之上的概念,为了方便管理而将多个脚本文件(模块文件)进行打包。
包是一种用点式模块名构造 Python 模块命名空间的方法。例如,模块名 A.B 表示包 A 中名为 B 的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分 NumPy 或 Pillow 等不同多模块包之间的模块名称。
包其实就是文件夹,包和文件夹的一大区别在于:包内存放了一个名为__pycache__的文件夹和__init__.py文件,该文件的内容就将是包的内容。然后是一些模块文件和子目录,如果子目录中也有__init__.py,那么它就是这个包的子包了。

2.3.2 包的导入

可以通过类似导入模块的方式导入包。导入包其实就是运行包下的__init__.py文件。如果包中没有__init__.py,则在导入包时不会有效果。但是会自动创建一个名为__pycache__ 的文件夹。
由于在导入包的时候会自动运行包内的__init__.py文件,所以一般会在该文件中写明导入包时要导入的包内其他py文件的语句。此时就可以用到相对导入了。
不建议在包内的__init__.py文件中写入其它非导入模块语句,尽量保证该文件的简洁性。
在__init__.py文件中,可以定义一个变量:__all__,一般这个变量等于该包内所有子模块名,这样在通过from 包 import *时则会查找__all__变量,并将该变量所指向的模块全部导入。

2.3.3 库的概念

库是具有相关功能模块(包)的集合。这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块。一些大型的项目要实现比较多的功能,创建了许多的包和模块,那么就可以将所有的包放在一起,形成一个库。
其实库是个抽象的概念,只要某个模块或者一组模块,开发它们的目的就是给其它模块调用的,就可以称之为库。

2.3.4 标准库

Python 标准库
Python语言提供了功能丰富的标准库 。这些标准库把开发中常用的功能都做好了。我们可以直接使用它们。
这些标准库里面有一部分叫做内置类型(built-in types)和内置函数(built-in functions)。内置类型和内置函数无须使用import导入,可以直接使用。内置类型有:int、float、str、list、tuple等。
还有些标准库,需要使用import导入,才能使用。常见有 sys, os, time, datetime, json,random 等。
我们要结束Python程序,就可以使用sys库里面的exit函数。
我们要得到字符串形式的当前日期和时间,可以使用datetime库。
我们要获取随机数字,可以使用random库。
练习
1、利用dir、help探索上述标准库
2、使用不同的方式导入上述标准库

2.3.5 安装第三方库

同样的,和模块一样,来自网上其它人员编写的模块组合而成的库称之为第三方库,Python强大之处不仅仅是系统自带的标准库,还有来自网上由其它人员编写的大量实用的第三方库,下载安装之后可以极大的提高编程效率,让我们不必为了编写某些特定的功能去重复造轮子
要使用第三方库我们需要安装到本地。一般有以下几种方式安装第三方库:

2.3.5.1 通过pip安装

这也是最简单、最常用的一种方式。
1、运行cmd命令打开cmd窗口。
2、在cmd窗口中输入命令:pip install 第三方库名[==版本号]
3、按下回车后会自动到PYPI收集并安装第三方库。安装的路径为Python\Lib\site-packages,这个文件夹就是Python专门用来下载并安装第三方库的。

2.3.5.2 复制文件夹安装

1、直接到已经安装好第三方库的电脑上,找到第三方库安装的文件路径,将库相关的文件夹(一般为库同名的文件夹以及库名-版本号.dist-info文件夹)复制
2、粘贴到另一台电脑相应的文件夹中。

注意:这种方法是电脑没有网络无法从网上下载的一种替代方式,不推荐使用。并且要注意两台电脑上安装的Python版本最好要一致。

2.3.5.3 到PYPI官网上下载安装文件安装

1、直接打开PYPI并搜索要安装的库名。
2、找到后点击库主页左上方的Download files。然后在右侧找到适合自己电脑系统的安装文件。注意,这个时候下载的安装文件是.whl格式的。
3、打开cmd窗口并将工作目录切换到刚才下载的whl安装文件所在的目录中
4、通过命令pip install xx.whl即可完成安装。

2.3.5.4 通过PyCharm安装

1、打开PyCharm,然后点击文件\设置\项目:项目名\Python解释器,然后点击+

2、在弹出的对话空中,在上方输入要安装的库名:requests,找到之后点击左下方的安装软件包后。软件会自动下载并安装。

练习
通过不同的方式分别安装:pandas、requests、pygame、numpy库

2.3.6 导入说明

1、为了保证运行效率,每次解释器会话只导入一次模块。如果更改了模块内容,必须重启解释器;仅交互测试一个模块时,也可以使用 importlib.reload(),例如:
>>> import importlib
>>> importlib.reload(模块名)
2、可以使用as关键字将最后导入的内容和as后的名称进行绑定。例如:
import math as mt # 用mt代表导入后的math模块名
from math import sqrt as st # 用st代表导入的sqrt函数
模块名、变量、函数、类等都可以通过as和其它内容进行绑定。这么做的好处有几点:

  • 在不加入模块名的情况下可以区分同名对象
  • 可以简化输入,提高代码编写速度
    3、使用 from package import item 时,item 可以是包的子模块(或子包),也可以是包中定义的函数、类或变量等其他名称。import 语句首先测试包中是否定义了 item;如果未在包中定义,则假定 item 是模块,并尝试加载。如果找不到 item,则触发 ImportError 异常。相反,使用 import item.subitem.subsubitem 句法时,除最后一项外,每个 item 都必须是包;最后一项可以是模块或包,但不能是类、函数或变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python包和库 的相关文章

  • 动态向类添加类方法

    我有以下片段 FEED TYPES fan mail Fan Mail review Review tip Tip fan user Fan User fan song Fan Song fan album Fan Album played
  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • 在 Python 2.7 中出现“ImportError:无法导入名称 HTTPSConnection”错误

    我正在尝试在 AWS ElasticBeanstalk 中部署 django 当我按照所示步骤操作时here http docs aws amazon com elasticbeanstalk latest dg create deploy
  • 在Python中,如何将矩阵逆时针旋转90度?

    gt gt gt def rotate matrix k List List int For example if I have m 1 2 3 2 3 3 5 4 3 rotate matrix m should give me 3 3
  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • ValueError:数据必须为正(boxcox scipy)

    我正在尝试将我的数据集转换为正态分布 0 8 298511e 03 1 3 055319e 01 2 6 938647e 02 3 2 904091e 02 4 7 422441e 02 5 6 074046e 02 6 9 265747e
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • 更改 Matplotlib 投影轴的背景颜色

    我正在尝试使用 Cartopy 创建一个图形 该图形需要在未投影的轴上绘制投影轴 这是一个尽可能简单的代码版本 它将轴上的内容替换为背景颜色 import matplotlib pyplot as plt import cartopy cr
  • Django 2、python 3.4 无法解码 urlsafe_base64_decode(uidb64)

    我正在尝试通过电子邮件激活用户 电子邮件有效 编码有效 我使用了 django1 11 中的方法 该方法运行成功 在 Django 1 11 中 以下内容成功解码为 28 其中 uidb64 b Mjg force text urlsafe
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • 是否可以使用 Anaconda 包作为 Google Cloud Functions 的依赖项?

    我正在使用 Python 运行时编写 Google Cloud Function 我需要包含一些无法使用的依赖项pip 如文档中所述here https cloud google com functions docs writing spe
  • Python 读取未格式化的直接访问 Fortran 90 给出不正确的输出

    这是数据的写入方式 它是一个二维浮点矩阵 我不确定大小 open unit 51 file rmsd nn output form unformatted access direct status replace recl Npoints
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • 如何使用 Python/Django 在 Facebook 中获取(和使用)扩展权限

    我正在尝试编写一个简单的应用程序 让用户授予我的代码写入其页面的 Facebook 流的权限 据我了解 它应该很简单 让用户单击一个按钮 启动一个弹出窗口 其中包含我的 Facebook 应用程序中的页面 在该页面中 他们单击授予的内容流发
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to

随机推荐

  • QLabel设置背景图片

    您可以使用Qt的QPalette类来设置QLabel的背景图片 以下是一个简单的示例 include
  • 2021爱分析·房企数字化厂商全景报告

    目录 1 研究范围定义 2 市场全景地图 3 市场定义与厂商评估 4 入选厂商列表 关于爱分析 研究与咨询服务 法律声明 1 研究范围定义 研究范围 本报告研究对象为房企 主要包括从事房地产开发 商写资产运营 物业服务等业务的综合性房地产企
  • [QT编程系列-20]:基本框架 - QT的测试框架QTest

    目录 第1章 QT测试框架与搭建步骤 第2章 Qt Test概述 2 1 概述 2 2 测试代码和项目代码共存 2 3 如何运行测试代码 2 4 ctest命令 第3章 单元测试代码示例 3 1 代码目录结构 3 2 代码示例 第4章 QT
  • Java写Mybatis的配置文件的注意事项

    先来聊聊properties配置文件的一些坑 1 注意自己当前使用的mysql的版本 版本低的 driver配置是 具体的版本是多少忘了 com mysql jdbc Driver 版本高的用 com mysql cj jdbc Drive
  • STM32中断与事件的区别

    STM32中断与事件的区别 在我们配置中断时 时常会困惑于什么是事件模式 EXTI InitStruct EXTI Mode 怎样选择 是选择中断模式还是事件模式 EXTI InitStruct EXTI Line EXTI Line0 E
  • IDEA 控制台输出中文乱码的简单解决方案

    目录 引言 解决方案 第一步 第二步 下载JDK 选择现有的JDK 完成 引言 很多人 包括我 在编程的时候可能会发现 在IDEA的控制台输出中文字符的时候 会出现乱码 如下图 于是就在网上搜了很多教程 结果弄完了却还是不行 下面是我的解决
  • 编译原理(第3版)第二章部分习题答案

    1 文法G A B C a b c P S 其中P为 S gt Ac aB A gt ab B bc 写出L G S 的全部元素 解 L G S 的全部元素为 a b c 2 文法G N 为 N gt D ND D gt 0 1 2 3 4
  • 修改intelliJ IDEA默认Mvnen插件镜像地址 ,加速依赖安装

    前言 1 3叙述的是如何找到idea的mvnen 如果是手动安装的Mvnen 直接跳到4 本文基于Linux平台 mac windows可作参考 如果是ToolBox安装的IDEA 那么桌面启动程序文件一般在 home USER local
  • 华为OD机试 Python 【五子棋迷】

    题目 张兵和王武喜欢玩五子棋 现在轮到张兵了 他面前的棋盘上有一排棋子 棋子规则 1 表示白子 0 表示没子 是个空位 1 表示黑子 一排棋子中 棋子数量L要满足 1 lt L lt 40 并且L是奇数 你要写个程序帮张兵找到最佳的落子位置
  • 【Apache Spark 】第 3 章Apache Spark 的结构化 API

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Tomcat提高并发量,性能优化

    系统采用的常用框架 Mysql SSM Tomcat结构 测试工具使用的是Jmeter 刚开始测试 并发量为200 s 居然错误率达到了15 让我很郁闷 按Tomcat的性能200的并发量应该完全没问题 于是我搜了一下提高Tomcat并发量
  • 区块链入门系列之P2P

    区块链入门系列文章 区块链基本概念和名词解释 P2P 共识算法 梅克尔 帕特里夏树 从零开始搭建区块链 这里写自定义目录标题 区块链入门系列文章 前言 中心化架构 去中心化架构 NAT 锥型NAT 完全锥型NAT 非完全锥型NAT IP受限
  • Devops 基础介绍

    文章目录 前言 一 软件开发概述 1 软件开发生命周期 2 软件开发瀑布模型 3 软件的敏捷开发 3 1 迭代开发 3 2 增量开发 3 3 敏捷开发如何迭代 3 4 敏捷开发的好处 二 持续集成概述 1 什么是持续集成 2 持续集成的流程
  • 嵌入式C中__attribute__编译属性说明

    锲而不舍 金石可镂 文章目录 前言 参数介绍 1 aligned 2 packed 3 at 4 section 总结 前言 attribute 是GNU C扩展下一大特性机制 用于设置函数属性 Function Attribute 变量属
  • http及https的 抓包分析

    HTTP及HTTPS实验 1 访问http wwww qq com和https www sangfor com cn并抓包 分析从PC访问到结束访问网站的全数据流过程 2 分析DNS解析过程及请求回应报文结构 掌握DNS报文结构特征和DNS
  • 编译执行和解释执行有什么区别

    什么是脚本 脚本是嵌入式代码 无需编译器就可以在环境中运行 起到解释作用 动态程序一般有两种方式 1 二进制方式是将我们编写的程序进行编译 编程机器可以识别的指令代码 然后再执行 这种已编译好的程序让我们只能执行 使用 却看不他的程序内容
  • vue的常用的属性有哪些?

    new vue el data template methods computed render watch vue总共有7个常用的属性 如上 el 表示一个vue对象需要挂载到哪一个html对象上面 值为那个html对象的id data
  • 【复赛模拟试题】收费站(二分答案+Dijkstra)

    问题描述 在某个遥远的国家里 有n个城市 编号为1 2 3 n 这个国家的政府修建了m条双向的公路 每条公路连接着两个城市 沿着某条公路 开车从一个城市到另一个城市 需要花费一定的汽油 开车每经过一个城市 都会被收取一定的费用 包括起点和终
  • 负载

    参考博客 https baike baidu com item E8 B4 9F E8 BD BD E7 94 B5 E9 98 BB 1136575 fr aladdin http www elecfans com d 938676 ht
  • Python包和库

    2 3 包和库 2 3 1 包的概念 包是在模块之上的概念 为了方便管理而将多个脚本文件 模块文件 进行打包 包是一种用点式模块名构造 Python 模块命名空间的方法 例如 模块名 A B 表示包 A 中名为 B 的子模块 正如模块可以区