我的编程空间,编程开发者的网络收藏夹
学习永远不晚

解析Python编程中的包结构

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

解析Python编程中的包结构

假设你想设计一个模块集(也就是一个“包”)来统一处理声音文件和声音数据。通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能需要创建和维护一个不断增长的各种文件格式之间的转换的模块集合。并且可能要执行声音数据处理(如混合,添加回声,应用平衡功能),所以你写一个永无止境的流模块来执行这些操作:模块设计的包如下:


sound/             Top-level package
   __init__.py        Initialize the sound package
   formats/         Subpackage for file format conversions
       __init__.py
       wavread.py
       wavwrite.py
       aiffread.py
       aiffwrite.py
       auread.py
       auwrite.py
       ...
   effects/         Subpackage for sound effects
       __init__.py
       echo.py
       surround.py
       reverse.py
       ...
   filters/         Subpackage for filters
       __init__.py
       equalizer.py
       vocoder.py
       karaoke.py
       ...

当导入包以后,Python通过sys.path中的目录来寻找包的子目录。 每一个包都必须有__init__.py文件,这样做是为了防止某些目录有一个共同的名字。在最简单的情况下,__ init__.py可以只是一个空文件,但它也可以执行包的初始化代码,包括设置__all__变量,稍后介绍。 我们可以从包中导入单个模块,

例如: import sound.effects.echo 这会载入子模块sound.effects.echo。它必须引用全名。


sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

另外一种导入子模块的方法: from sound.effects import echo 这样就加载了echo子模块,没有包括包的前缀,因此它可以用作如下:


echo.echofilter(input, output, delay=0.7, atten=4)

或者可以


from sound.effects.echo import echofilter echofilter(input, output, delay=0.7, atten=4)

请注意,如果你使用包导入一个子模块(或子包),像一个函数,类或变量。 import语句首先测试导入的对象是否包中定义,如果没有,它假定这是一个模块,并尝试加载它。如果还没有找到,则会引发一个ImportError异常。

python 包管理工具大乱斗
1. distutils

distutils 是 python 标准库的一部分,2000年发布。使用它能够进行 python 模块的 安装 和 发布。

setup.py 就是利用 distutils 的功能写成,我们可以看一个简单的 setup.py 的例子。

在这里可以看到关于 setupt.py 格式的所有详细描述:Writing the Setup Script。

要安装一个模块到当前的 python 环境中,可以使用这个模块提供的 setup.py 文件:


python setup.py install

下面的代码会发布一个 python 模块,将其打包成 tar.gz 或者 zip 压缩包:

python setup.py sdist

甚至能打包成 rpm 或者 exe 安装包:


python setup.py bdist_rpm
python setup.py bdist_wininst

2. setuptools 和 distribute

setuptools 是一个为了增强 distutils 而开发的集合,2004年发布。它包含了 easy_install 这个工具。

ez_setup.py 是 setuptools 的安装工具。ez 就是 easy 的缩写。

简单的说,setuptools 是一个项目的名称,是基础组件。而 easy_install 是这个项目中提供的工具,它依赖基础组件工作。

为了方便描述,下面文章中提到的 setuptools 被认为与 easy_install 同义。

使用 setuptools 可以自动 下载、构建、安装和管理 python 模块。

例如,从 PyPI 上安装一个包:


easy_install SQLObject

下载一个包文件,然后安装它:


easy_install http://example.com/path/to/MyPackage-1.2.3.tgz

从一个 .egg 格式安装:


easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg

distribute 是 setuptools 的一个分支版本。分支的原因可能是有一部分开发者认为 setuptools 开发太慢了。但现在,distribute 又合并回了 setuptools 中。因此,我们可以认为它们是同一个东西。事实上,如果你查看一下 easy_install 的版本,会发现它本质上就是 distribute 。


# easy_install --version
distribute 0.6.28

3. Eggs

Eggs 格式是 setuptools 引入的一种文件格式,它使用 .egg 扩展名,用于 Python 模块的安装。

setuptools 可以识别这种格式。并解析它,安装它。

4. pip

注意,从此处开始,easy_install 和 setuptools 不再同义。

pip 是目前 python 包管理的事实标准,2008年发布。它被用作 easy_install 的替代品,但是它仍有大量的功能建立在 setuptools 组件之上。

pip 希望不再使用 Eggs 格式(虽然它支持 Eggs),而更希望采用“源码发行版”(使用 python setup.py sdict 创建)。这可以充分利用 Requirements File Format 提供的方便功能。

pip 可以利用 requirments.txt 来实现在依赖的安装。在 setup.py 中,也存在一个 install_requires 表来指定依赖的安装。

pip 支持 git/svn/hg 等流行的 VCS 系统,可以直接从 gz 或者 zip 压缩包安装,支持搜索包,以及指定服务器安装等等功能。

pip vs easy_install 详细介绍了两者的不同。它们可以说是各占胜场,但 pip 明显优势更大。

5. wheel

wheel 本质上是一个 zip 包格式,它使用 .whl 扩展名,用于 python 模块的安装,它的出现是为了替代 Eggs。

wheel 还提供了一个 bdist_wheel 作为 setuptools 的扩展命令,这个命令可以用来生成 wheel 包。

pip 提供了一个 wheel 子命令来安装 wheel 包。当然,需要先安装 wheel 模块。

setup.cfg 可以用来定义 wheel 打包时候的相关信息。

Wheel vs Egg 详细介绍了 wheel 和 Eggs 格式的区别,很显然,wheel 优势明显。

Python Wheels 网站展示了使用 Wheels 发行的 python 模块在 PyPI 上的占有率。

pypip.in 也支持 wheel。

6. distutils2 和 distlib

distutils2 被设计为 distutils 的替代品。从2009年开发到2012年。它包含更多的功能,并希望以 packaging 作为名称进入 python 3.3 成为标准库的一部分。但这个计划 后来停滞了 。

distlib 是 distutils2 的部分,它为 distutils2/packaging 提供的低级功能增加高级 API,使其便于使用。

这里 介绍了 distlib 没有进入 python 3.3 标准库的一些原因。

因此,可以暂时不必了解这两个工具,静观其变即可。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

解析Python编程中的包结构

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

解析Python编程中的包结构

假设你想设计一个模块集(也就是一个“包”)来统一处理声音文件和声音数据。通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所以你可能需要创建和维护一个不断增长的各种文件格式之间的转换的模块集合。并且可能要执行声音数据处理(如
2022-06-04

初步剖析C语言编程中的结构体

C语言结构体,可谓是C强大功能之一,也是C++语言之所以能衍生的有利条件,事实上,当结构体中成员中有函数指针了后,那么,结构体也即C++中的类了。 C语言中,结构体的声明、定义是用到关键字struct,就像联合体用到关键字union、枚举类
2022-06-04

python中元组打包和解包的过程分析

这篇文章主要讲解了“python中元组打包和解包的过程分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中元组打包和解包的过程分析”吧!1、在将多个以逗号分隔的值赋给一个变量时,
2023-06-20

Python程序中的观察者模式结构编写示例

察者模式定义 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。 设计原则 为了交互对象之间的松耦合设计而努力。松耦合的设计之所以能让我们
2022-06-04

Java编程中要了解的数据结构是怎样的

今天就跟大家聊聊有关Java编程中要了解的数据结构是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。几乎所有的问题都需要面试者对数据结构有深刻的理解。无论你是初入职场的新兵(刚从
2023-06-02

Android APK文件结构 完整打包编译的流程 APK安装过程 详解

Android apk文件结构 打包编译的流程Android官网 配置构建 流程Configure your buildThe build processAPK文件结构assetsreslibMETA-INFAndroidManifest.
2022-06-06

详解Python编程中包的概念与管理

Python中的包 包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。 考虑一个在Phone目录下的pots.py文件。这个文件有如下源代码:#!/usr/bin/python # -*-
2022-06-04

Python Pandas中的数据结构实例分析

今天小编给大家分享一下Python Pandas中的数据结构实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言:Pa
2023-07-02

解析切片中的两种不同结构

大家好,今天本人给大家带来文章《解析切片中的两种不同结构》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!问题内容我的输入 json 数据是这样的(无法从外部资源更改):[
解析切片中的两种不同结构
2024-04-04

Python程序的分支结构实例代码分析

这篇文章主要讲解了“Python程序的分支结构实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序的分支结构实例代码分析”吧!单分支结构:if 语句Python 中 i
2023-07-06

Springboot中PropertySource的结构与加载过程逐步分析讲解

本文重点讲解一下Spring中@PropertySource注解的使用,PropertySource主要是对属性源的抽象,包含属性源名称name和属性源内容对象source。其方法主要是对这两个字段进行操作
2023-01-06

Shell编程中for循环结构是怎么样的

小编给大家分享一下Shell编程中for循环结构是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!for i in {取值范围}do循环体done求取1-100数字的和、找出1-100中能被2整除的数字、找出1-10
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录