python中的包和模块

目录

一、包与模块

二、第三方包的安装

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.barfrom 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.mzph.cn/pingmian/39099.shtml

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

相关文章

【linux网络(七)】数据链路层详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. 认识MAC…

【计算机毕业设计】061互助学习微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

北京网站建设怎么开始做

北京作为中国的首都&#xff0c;拥有众多的企业和机构&#xff0c;网站建设不仅是一种宣传和推广的手段&#xff0c;更是企业发展的必备工具。但是对于很多企业来说&#xff0c;网站建设是一个相对陌生的领域&#xff0c;不知道从哪里开始。今天我们就来谈一谈北京网站建设的步…

Dockerhub无法拉取镜像配置阿里镜像加速器

打开阿里镜像加速地址&#xff1a; https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 根据平台类型按照对应方式进行配置&#xff1a;Dokcer Desktop是在右上角点开配置 找到Docker Engine 进行设置JSON结构&#xff1a; 记得要重启Docker服务才会生效&#xff01…

深度学习笔记: 最详尽解释预测系统的分类指标(精确率、召回率和 F1 值)

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 预测系统的分类指标(精确率、召回率和 F1 值) 简介 让我们来谈谈预测系统的分类指标以及对精确率、召回…

Spring MVC的高级功能——异常处理(一)简单异常处理器

一、HandlerExceptionResolver接口 如果希望对Spring MVC中所有异常进行统一处理&#xff0c;可以使用Spring MVC提供的异常处理器HandlerExceptionResolver接口。Spring MVC内部提供了HandlerExceptionResolver的实现类SimpleMappingExceptionResolver。它实现了简单的异常处理…

对于复杂的网页布局,如多列布局和网格布局,CSS 有哪些最佳实践和技巧?

对于复杂的网页布局&#xff0c;如多列布局和网格布局&#xff0c;以下是一些CSS的最佳实践和技巧&#xff1a; 使用Flexbox或CSS Grid布局&#xff1a;Flexbox和CSS Grid是两个强大的CSS布局模型&#xff0c;可用于实现复杂的网页布局。Flexbox适用于单行或单列布局&#xff0…

SpringSecurity6 | 基于数据库实现登录认证

SpringSecurity6 | 基于数据库认证 ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 基于数据库实现登…

数据资产的价值变现及管理规划(AMT企源)

从数据资源到数据资产之数据资产的价值变现及管理规划 题记 本文旨在探讨数据资产发展途径、数据产权及价值变现的服务流程和路径&#xff0c;并对数据资产管理平台框架、数据资产管理实施规划做出初步解读&#xff0c;以期为数据资产管理提供有益的思路和方案。 本次推出《从…

09 - Python图形用户界面和游戏开发

图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写&#xff0c;图形化的用户界面对使用过计算机的人来说应该都不陌生&#xff0c;在此也无需进行赘述。Python默认的GUI开发模块是tkinter&#xff08;在Python 3以前的版本中名为Tkinter&#xff09;&…

【linux】虚拟机安装 BCLinux-R8-U4-Server-x86_64

目录 一、概述 1.1移动云Linux系统订阅服务 CLS 1.2 大云天元操作系统BC-Linux 二、安装 一、概述 1.1移动云Linux系统订阅服务 CLS 移动云Linux系统订阅服务 CLS &#xff08;Cloud Linux Service&#xff09;为使用BC-Linux操作系统的用户提供标准维保服务以及高级技术支…

62、Flink自定义 SimpleAccumulator 代码示例

1、概述 需要实现 SimpleAccumulator 接口&#xff0c;并重写 add&#xff0c;getLocalValue&#xff0c;resetLocal&#xff0c;merge&#xff0c;clone 等方法。 2、代码示例 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; im…

mysql-5.6.26-winx64免安装版本

mysql为什么要使用免安装 MySQL 提供免安装版本主要有以下几个原因和优势&#xff1a; 便捷性&#xff1a;用户无需经历安装过程&#xff0c;直接解压即可使用。这对于需要快速部署环境或者在不支持安装权限的系统上使用MySQL非常有用。灵活性&#xff1a;免安装版允许用户将…

actual combat 32 —— RabbitMQ

1. 五种模式 RabbitMQ有五种工作模式&#xff0c;分别是简单模式、工作模式、发布订阅模式、路由模式和主题模式 简单模式&#xff08;Simple Mode&#xff09;&#xff1a;这种模式包含一个生产者和一个消费者。生产者将消息发送到队列&#xff0c;消费者从队列中获取消息。…

Optional类方法

Optional类 简介方法empty()方法of(T value)ofNullable(T value)filter(Predicate<? super T> predicate)get()ifPresent(Consumer<? super T> consumer)isPresent()map(Function<? super T,? extends U> mapper)orElse(T other)orElseGet(Supplier<?…

撸包看广告小游戏app开发现有案例搭建

开发一个撸包看广告小游戏涉及多个关键步骤和考虑因素。以下是一个大致的开发流程&#xff1a; 市场调研与定位&#xff1a; 深入了解目标用户群体的需求和偏好&#xff0c;以及市场上类似游戏的状况。 确定游戏的目标受众和定位&#xff0c;如休闲益智、动作冒险等类型。 游…

基于Chrome扩展的浏览器可信事件与网页离线PDF导出

基于Chrome扩展的浏览器可信事件与网页离线PDF导出 Chrome扩展是一种可以在浏览器中添加新功能和修改浏览器行为的软件程序&#xff0c;我们可以基于Manifest规范的API实现对于浏览器和Web页面在一定程度上的修改&#xff0c;例如广告拦截、代理控制等。Chrome DevTools Proto…

React 高频面试题1(答案和题目都是根据讯飞星火写的)

1. 解释React中的虚拟dom&#xff0c;并说明它是如何工作的。 虚拟dom是介于数据与真实dom之间的抽象层&#xff0c;是一个轻量级的JavaScript对象。react组件的状态或属性发生改变时会重新渲染组件&#xff0c;生成新的虚拟dom。然后react会比较新旧两个dom&#xff08;这个过…

LeetCode 子集

原题链接78. 子集 - 力扣&#xff08;LeetCode&#xff09; 这是一道暴力搜索问题参考大佬们的题解&#xff0c;对这类题目做出一下总结 1.确定递归参数变量 2.递归结束条件 3.做出选择&#xff0c;递归调用进入下一层 4.回溯&#xff0c;返回到递归前的状态 要完成前面这…

.net 百度翻译接口核心类

百度翻译api &#xff1a;http://developer.baidu.com/wiki/index.php?title帮助文档首页/百度翻译/翻译AP 核心翻译类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Newtonsoft.Json; using System.Net; using System.I…