Python基础之模块和包

本节将介绍Python中的模块和包的概念及基本用法。


模块

简单来说模块就是一个python文件,我们可以将一些常量、函数、类等封装到一个模块中,然后在程序中使用该模块。模块类似Java中的包(package),目的是组织代码结构,重用代码等。

命名

模块的命名应该采用小驼峰方式,即只包含数字,字母和下划线等字符。其中,模块名应该只包含小写字母,且首字符不能是数字,单词与单词之间用下划线分割。因为在导入模块时模块名会作为程序的一部分,因此模块名必须按规范命名。

导入模块

  1. import 模块名
  2. import 模块名 as 别名
  3. import folder1.folder2...folderN.模块名 [as 别名]。注:当模块在某个目录中时按这种方式导入。
  4. from 模块名 import 函数/常量/类 [as 别名]。注:只从模块中导入一个函数、常量或类。
  5. from 模块名 import *。注:从模块中导入所有内容。

对于上面的第4和第5点,导入后的函数、常量、类等内容会直接进入到当前代码的符号列表中。好处是可以直接使用函数、常量和类而不需要指定模块名,缺点是可能有名字冲突。如果有名字冲突新导入的会覆盖开始导入的,可以使用as起一个别名以防止命名冲突。所以使用哪一种导入方式需要根据具体场景来决定。

模块查找顺序

总的来说按照这个顺序查找:当前路径  ./   ->  系统路径 .../Lib/...   -> 第三方路径  .../Lib/site-packages, 例如:

import sysprint(sys.path)

运行结果:

D:\work\python_workspace\python_study\basic_08>python module_search.py
['D:\\work\\python_workspace\\python_study\\basic_08', 'D:\\Program Files\\Pytho
n38\\python38.zip', 'D:\\Program Files\\Python38\\DLLs', 'D:\\Program Files\\Pyt
hon38\\lib', 'D:\\Program Files\\Python38', 'D:\\Program Files\\Python38\\lib\\s
ite-packages']

每个模块都应该独立开发,每一个模块都应该是可以被导入的,文件中所有没有缩进的代码在导入时都要被执行。

"__name__"代表模块名,被导入时输出模块名。在当前模块中执行时输出"__main__",一般用于模块的测试。例如:

if __name__ == "__main__":pass

包是一个包含多个模块的特殊文件,是模块的集合,类似Java中的jar。包中有一个特殊文件__init__.py,里面存放包的配置数据。包的命名和模块命名一样,都是小驼峰形式。

导入包

import 包名。可以导入包中所有模块。注意:需要在__init__.py中指定哪些模块会被导入,例如指定:from . import 模块

如何使用包?

包名.模块名.函数(类、全局变量等)

制作压缩包

制作压缩包的目的是让别人可以使用自己开发的包。

  1. 构建以下目录结构

    setup.py中存放的是编译相关的参数,fibonacci.py是包中的模块,可计算斐波拉契数列,__init__.py中存放的是包的配置,包含可以导出哪些模块。
  2. setup.py
    from distutils.core import setupsetup(name='hello_package', version='1.0', description='This is a test hellp package',long_description='This is a test hellp package',author='WXH',author_email='wxhyzh2005@163.com', url='https://blog.csdn.net/funnyrand', py_modules=['hello_package.fibonacci'])
    
  3. __init__.py
    from . import fibonacci
  4. 编译包
    在目录hello_package_root中执行两个命令:python setup.py buildpython setup.py sdist

    编译完成后的目录结构:

    可以看出生成了包文件:hello_package-1.0.tar.gz。我们可以把该文件发送给其他人使用。

使用压缩包

假设我们拿到了别人发给我们的包文件hello_package-1.0.tar.gz,按下面步骤使用,

  1. 解压,命令 tar -zxvf 文件名。注:Linux上使用此命令,windows上直接解压即可。
  2. 安装包,在解压后的目录中执行命令:python setup.py install
  3. 使用新安装的包
  4. 卸载安装包
    到安装目录,把相应的包目录删除即可,一般有两个目录:包目录包名-<verion>.egg-info

    删除后再导入该包就会报错,

使用pip管理包

如果每次需要某个包的时候都自己去下载然后再安装,这将非常繁琐和复杂,且无法解决包的依赖问题。可以使用pip命令来安装和卸载包。windows上可以在这里下载pip:https://pypi.python.org/pypi/pip#downloads。Ubuntu上可通过命令安装:sudo apt-get install python3-pip

使用pip安装某个包:pip3 install xxx
使用pip卸载某个包:pip3 uninstall xxx

关于pip的更多细节可以参考:https://www.runoob.com/w3cnote/python-pip-install-usage.html

Python基础之模块和包相关推荐

  1. 带你学python基础:模块和包

    一.什么是模块 在我们平时的开发过程中,或多或少会用到 Python 的一些内置的功能,或者说,还会用到一些第三方的库,我们用到的这些 Python 的内置的功能,和一些第三方的库,就可以说是一些模块 ...

  2. Python基础之模块与包

    一.模块 1.什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2.为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函 ...

  3. python之路——模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...

  4. python哪里下载import包-详解python中的模块及包导入

    python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...

  5. Python 中的模块和包

    原文引至:前端小吉米 对于python中的模块和包, 我简直就想说, js nmlgb 就是一个 trash... 在前端写js根本就没有什么模块和包, 全部都是全局... 真lj... 畅快了. 写 ...

  6. python基础——使用模块

    python基础--使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

  7. python基础之模块之os模块

    python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...

  8. 自学Python第九天- 模块、包、编码、文件操作、OS 模块、打包

    自学Python第九天- 模块.包.编码.文件操作.OS 模块.打包 模块 导入模块 程序入口 包 编码 文件操作 打开或创建文件 常用的文件打开模式 边读边写 文件对象的常用方法 读写 CSV Ex ...

  9. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

最新文章

  1. PLSQ执行同样的sql,使用mybatis进行动态拼装执行的时候非常慢的问题解决
  2. USNews 2020美国大学排名公布:UCLA超越伯克利;计算机专业MIT第一,斯坦福跌出前四...
  3. python自定义线程
  4. nginx日志切割定时执行脚本
  5. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述
  6. bug__android studio 出现布局文件不提示,且点击代码不能跟踪代码
  7. 读书笔记:《时间投资法》之一
  8. (一)SpringMVC学习笔记-概述
  9. Flutter实战之FlutterPlugin插件入门指南
  10. Kubernetes可以代替Docker,可笑
  11. 01> Allwinner全志 T7 Android 7.1 编译
  12. 点计算机管理没反应,电脑任务栏没反应怎么办 任务栏没反应解决方法
  13. 冯鑫、雷军、王峰、蒋涛、傅盛等金山系老将,已将区块链拼成完整生态图
  14. Labjack系列-数据采集卡,USB数据采集卡与 Labview对接的编程操作
  15. requests+xpath之贴吧图片爬取
  16. 测试固态硬盘有没有坏道的软件,固态硬盘有坏道怎么办(ssd坏块检测工具)
  17. 如何提高抗压能力和适应能力
  18. Windows下CURL编译 支持HTTPS
  19. 锚框之间的IOU理解
  20. 恶意代码检测c语言,恶意代码检测分析软件

热门文章

  1. 最新QQ开心农场,QQ开心牧场源码
  2. python 多进程 每个进程做不同功能实例_python多进程通信实例分析
  3. LeetCode精选算法100题,从入门到入赘
  4. 教师职业生涯随笔————关键实习事件
  5. tess4J 安装使用
  6. 【蓝桥杯单片机最全备考资料】真题、代码、原理图、指导手册、资源包
  7. 基于jupyter notebook的python编程-----利用梯度下降算法求解多元线性回归方程,并与最小二乘法求解进行精度对比
  8. 第一篇博客,python爬取淘宝信息
  9. 从头造轮子:python3 asyncio之 run_until_complete (1)
  10. Docker 安装 (完整详细版)