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

python之基础篇(八)——模块与包

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

python之基础篇(八)——模块与包

防伪码:忘情公子著


python中的模块

  将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块。

  模块在物理形式上表现为以.py结尾的代码文件:

    一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件

    模块的文件名就是模块的名字加上扩展名.py

    每个模块都有自己的名称空间

  python允许"导入"其它模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统:

    在python中,模块也是对象

    在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性

  python程序架构:

    一个python程序通常包括一个顶层程序文件和其它的模块文件(0个、1个或多个)

      顶层文件:包含了程序的主要控制流程

      模块文件:为顶层文件或其它模块提供各种功能性组件

        模块首次导入(或重载)时,python会立即执行模块文件的顶层程序代码(不在函数内的代码)

        而位于函数主体内的代码直到函数被调用后才会执行

wKiom1ht4xSymysJAAC0DnOvXPc213.jpg

    可以使用help('modules')来查看系统中有哪些python的标准库模块。

  模块的执行环境:

    模块是被导入的,但模块也可以导入和使用其它模块,这些模块可以用python或其它编程语言写成

    模块可内含变量、函数以及类来进行其工作,而函数和类可以包含变量和其它元素

wKioL1ht5fKhKr5uAAB6yZNrhQ8676.jpg

  模块分类:

    a.标准库(又称内置模块)

    b.开源模块(又称第三方模块)

    c.自定义模块

  导入模块:

    在导入模块时只能使用模块名,而不能使用带.py后缀的模块文件名

    import语句:导入指定的整个模块,包括生成一个以模块名命名的名称空间

import module1 [, module2 [, ... moduleN]]

        建议一个import语句只导入一个模块

import module as module_alias

        一旦使用了别名,则仅能使用别名进行调用

    from-import语句:常用于只导入指定模块的部分属性至当前名称空间

from module import name1 [, name2 [, ... nameN]]

    动态导入模块:

     当我们知道模块的名称和路径,但是是以字符串的形式存在的,此时无法通过import语句直接导入

      这时我们就能以动态导入模块的方式导入该模块

import importlib
modname = 'lib.fib'
__import__(modname)

还可以使用以下官方推荐的方式动态导入模块,与上面的__import__(modname)效果一致:

importlib.import_module(modname)

  import和from-import是赋值语句:

    import和from是可执行语句,类似于def,因此,它们可以嵌套在if测试中,出现于def中等等

    python执行到这些语句时才会对其进行解析,这意味着,所有来自模块的属性仅在import语句执行后才能使用

  import和from都是隐性赋值语句:

    import将整个模块对象赋值给一个变量名

    from将一个或多个变量名赋值给导入此模块的模块中的同名对象

  模块就是名称空间:

    模块的名称空间可以通过属性__dict__或dir(M)获取

      模块属性可以通过点号(.)运算符获取,格式为M.attr

    模块是一个独立的作用域(本地变量就是全局变量)

  import的工作机制:

    import语句导入指定的模块时会执行三个步骤:

      找到模块文件

        在指定的路径下搜索模块文件

      编译成字节码

        文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃

        只有被导入的文件才会留下.pyc文件

      执行模块的代码来创建其所定义的对象

        模块文件中的所有语句会依次执行,从头至尾

        而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性

    注意:模块只在第一次导入时才会执行如上步骤:

      后续的导入操作只不过是提取内存中已加载的模块对象

      reload()可用于重新加载模块

  模块的顶层执行及被导入:

    一个模块文件可以同时支持顶层执行(作为顶层文件)或被导入(作为模块文件)。

    每个模块都有个名为__name__的内置属性,python会自动设置该属性:

      如果文件是以顶层程序文件执行,在启动时,__name__的值为"__main__"

      如果是被导入,则__name__的值为模块名

    可以在模块文件中检测自己的__name__属性,以之实现在执行时运行指定的代码,常用于模块的自我测试。

#!/usr/bin/python

def testFunc():
    print "Hello world"
if __name__ == "__main__":
    testFunc()

  模块搜索:

    python解释器在import模块时必须先找到对应的模块文件,python将在以下这些目录中查找模块文件:

      程序的主目录;

      PYTHONPATH目录(如果设置了此变量);

      标准链接库目录;

      任何.pth文件的内容(如果存在.pth文件)

    这四个组件组合起来即为sys.path所包含的路径,而python会选择在搜索路径中的第一个符合导入文件名的文件


python中的包

  如果我们开发了一系列的模块给别人使用,而这些模块是有关联性的,如果照前面说的,要设置模块搜索路径,然后将这一系列的模块放进去,这样就会很麻烦,于是就有了包的概念。

  包用于将一组模块归并到一个目录中,此目录即为包,目录名即为包名。

    包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的python应用程序执行环境

    基于包,python在执行模块导入时可以指定模块的导入路径,如:

      import dir1.dir2.mod1

wKioL1ht5-7TX6GAAAAfHjMIFds650.png

  要使用如图所示的package1,则py_pkg_mod容器必须要在模块搜索路径中。使用以下命令导入:

    import package1.mod1

  包导入语句的路径内的每个目录内都必须有__init__.py文件:

    __init__.py可包含python代码,但通常为空;

    仅用于扮演包初始化的挂钩、替目录产生模块命名空间以及使用目录导入时实现from *行为的角色

  发布python模块或程序:

    python模块、扩展和应用程序可以按以下几种形式进行打包和发布:

      压缩文件(使用distutils模块):

        windows的zip文件和类Unix平台的.tar.gz文件

      自动解包或自动安装可执行文件:

        windows中的.exe文件

      自包含的,不要求安装的预备运行可执行程序:

        windows的.exe文件、Unix上带有一个小的脚本前缀的ZIP压缩文件、Mac上的.app文件等

      平台相关的安装程序:

        windows上的.msi文件、Linux上常见的.rpm、class="lazy" data-src.rpm和.deb文件等;

      python eggs:

        较流行的第三方扩展

  使用distutils发布模块:

   distutils模块能够帮助完成模块或程序发布。

      "发布"是指一个文件集合,这些文件联合在一起可使用distutils构建、打包和发布模块

      创建好的发布可以用于安装,也可上传到PyPI与他人共享

    创建发布的步骤:

      1、将各代码文件组织到模块容器中;

      2、准备一个README或README.txt文件;

      3、而后在容器中创建setup.py文件,格式如下:

from distutils.core import setup
setup(
    name = 'testmod',        #包名
    version = '0.0.1',
    author = 'Forgotten',
    author_email = 'chengyujia@126.com',
    py_modules = ['testmod'],    #此包内所有的模块列表,多个模块名之间用逗号隔开
    url = 'http://itchentao.blog.51cto.com',    #模块可以从哪里获取到,此处只是个样例
    description = 'A simple module',    #模块的简要描述
)

    setup.py的常用参数:

      name:包的名称(必需)

      Version:版本号(必需)

      author:作者名称

      author_email:作者的电子邮件地址

      maintainer:维护者的名称

      maintainer_email:维护者的电子邮件地址

      url:包的主页

      description:包的简短描述

      long_description:包的详细描述

      download_url:包的下载位置

      Classifiers:字符串分类器列表

      py_modules:由所有模块名称组成的列表(必需)

        此些模块可能位于包的根目录下(modulename),也可能位于某子包目录中(subpkg1.modulename)

      packages:各子包名称组成的列表

      platforms:适用的平台列表

      license:许可证

    setup.py的参数大体分为两类:

      元数据信息(name、version等)

      包中的内容列表(py_modules、packages等)

      4、完成打包:

        在要发布的容器目录中执行"python setup.py sdist"命令进行源码打包:

          sdist可以指定以下格式进行打包:--formats=

            zip:zip压缩文件

            gztar:tar.gz压缩文件

            bztar:tar.bz2压缩文件

            ztar:tar.Z压缩文件

            tar:tar文件

        还可以在要发布的容器目录中执行"python setup.py bdist"命令进行二进制发行版打包:

          bdist可以指定以下格式进行打包:--formats=

            gztar:tar.gz压缩文件

            ztar:tar.Z文件

            tar:tar文件

            zip:zip压缩文件

            rpm:RPM包文件

            pkgtool:Solaris pkgtool

            wininst:windows上能自解压的zip格式的包

            msi:Microsoft Installer

          bdist_dump:做成tar、ztar、gztar、zip格式的包

          bdist_rpm:做成rpm格式的包

          bdist_wininst:做成wininst格式的包

          bdist_msi:做成msi格式的包

      获取帮助的方式:

        python setup.py --help

        python setup.py --help-commands:所有可以使用的命令,如build,install

        python setup.py COMMAND --help:获取特定命令的帮助

        python setup.py COMMAND --help-formats:获取特定命令支持使用的格式

      5、安装打包好的模块:

        使用python setup.py install命令安装源码打包文件

        上传到PyPI上的包,可以使用pip,easy_install命令来安装


  python中安装第三方模块包:

    使用python setup.py install命令安装模块:有两个阶段(build、install)

      如果不执行python setup.py build而直接执行python setup.py install,在安装时会自动进行build操作。

      在执行python setup.py build时python会在执行这条命令的目录下创建一个build目录。

    python setup.py build:

      --build-base=/path/to/build_dir 指定目录进行build,build的过程将保存至指定目录下。

      build完成后将会在build目录下生成以下目录,用以保存即将安装的模块文件:

        lib:保存纯python语言所研发的模块

        lib.platform:存放与平台密切相关的、无法实现跨平台的、编译好的库文件

    python setup.py install:

      install的过程仅仅只是将编译好的文件复制到指定的模块安装目录中。

      在未指定安装目录时,默认将安装到第三方模块安装目录中(/python安装目录/lib/site-packages)

      自定义安装路径:

        --user=:安装至指定用户家目录中特定的目录下

          常用于普通用户,因为普通用户对某些目录是没有写权限的

        --prefix=:指定python库的安装路径

          要对指定目录有写权限

        --exec-prefix=:用于指定与python无关的、由其他语言实现的、跟平台相关的特定文件的安装路径

          要对指定目录有写权限

      深度定制:

        --install-purelib=/path/to/python_lib

        --install-platlib=/path/to/plat_lib

        --install-lib=/path/to/lib

          --install-purelib和--install-platlib选项可以用--install-lib来替代

          若三个选项都指定了,则--install-lib的优先级最高

        --install-scripts=/path/to/bin  指定可执行文件的安装路径

        --install-data:指定数据文件的安装路径

        --install-headers:指定用C写出来的可执行程序的头文件安装路径

免责声明:

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

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

python之基础篇(八)——模块与包

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

下载Word文档

猜你喜欢

python之基础篇(八)——模块与包

防伪码:忘情公子著python中的模块  将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块。  模块在物理形式上表现为以.py结尾的代码文件:    一个文件被看作一个独立的模块,
2023-01-31

Python基础——模块与包

在Python中,可以用import导入需要的模块、包、库、文件等。 把工作路径导入系统路径 import os#os是工作台import sys#sys是系统sys.path.append(os.getcwd())sys.path写脚本文
2023-01-31

Python基础之hashlib模块详解

一、hashlib简介 1.什么叫hash: hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
2022-06-02

Python基础之函数和模块

函数的基本使用函数的定义:把具有独立功能的代码块组织成一个小模块,在需要的时候调用。或者说,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数的使用:1.定义函数;2.调用函数。函数的作用:能提高应用的模块性,和代码的重
2023-01-31

Python爬虫基础之requestes模块

一、爬虫的流程 开始学习爬虫,我们必须了解爬虫的流程框架。在我看来爬虫的流程大概就是三步,即不论我们爬取的是什么数据,总是可以把爬虫的流程归纳总结为这三步: 1.指定 url,可以简单的理解为指定要爬取的网址 2.发送请求。requests
2022-06-02

Python基础之模块怎么使用

这篇文章主要介绍“Python基础之模块怎么使用”,在日常操作中,相信很多人在Python基础之模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python基础之模块怎么使用”的疑惑有所帮助!接下来
2023-07-06

python之基础篇(十)——执行环境与

防伪码:忘情公子著解释器环境与选项  python解释器启动:python [options] [-c cmd | filename | - ] [args]选项描述-3启用将从python3中删除或更改某些功能的警告-B阻止在导入时创建.
2023-01-31

Python基础之模块的示例分析

这篇文章给大家分享的是有关Python基础之模块的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是模块容器 -> 数据的封装函数 -> 语句的封装类 -> 方法和属性的封装模块 -> 模块就是程序
2023-06-15

Python基础之如何使用multiprocessing模块

一、multiprocessing模块 multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以使用multiprocessing.Proces 对象来创建一个进程。 该进程可以运行在P
2022-06-02

Python基础之logging模块知识总结

目录前言一、日志级别二、basicConfig三、日志写文件四、traceback记录前言 logging模块是Python内置的标准模块,主要用于输出脚本运行日志,可以设置输出日志的等级、日志保存路径等。可以通过设置不同的日志等级,在 r
2022-06-02

编程热搜

  • 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动态编译

目录