在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

模块的作用

  1. 最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
  2. 使用模块还可以避免函数名和变量名冲突。每个模块有独立的命名空间,因此相同名字的函数和变量完全可以分别存在不同的模块中,所以,我们自己在编写模块时,不必考虑名字会与其他模块冲突

模块分类

模块分为三种:

  • 内置标准模块(又称标准库)执行help('modules')查看所有python自带模块列表
  • 第三方开源模块,可通过pip install 模块名 联网安装
  • 自定义模块

模块调用

import modulefrom module import xxfrom module.xx.xx import xx as rename  from module.xx.xx import *

注意:模块一旦被调用,即相当于执行了另外一个py文件里的代码

自定义模块

这个最简单, 创建一个.py文件,就可以称之为模块,就可以在另外一个程序里导入

模块查找路径

自己写的模块只能在当前路径下的程序里才能导入,换一个目录再导入自己的模块就报错说找不到了,这与导入路径有关

import sysprint(sys.path)

输出

['', 'C:Python36python36.zip',
'C:Python36DLLs',
'C:Python36lib',
'C:Python36',
'C:Python36libsite-packages',
'C:Python36libsite-packagesIPythonextensions']

python解释器会按照列表顺序去依次到每个目录下去匹配你要导入的模块名,只要在一个目录下匹配到了该模块名,就立刻导入,不再继续往后找。

开源模块安装、使用

https://pypi.python.org/pypi 是python的开源模块库,截止2020年8.3日 ,已经收录了254243个来自全世界python开发者贡献的模块,几乎涵盖了你想用python做的任何事情。 事实上每个python开发者,只要注册一个账号就可以往这个平台上传你自己的模块,这样全世界的开发者都可以容易的下载并使用你的模块。

那如何从这个平台上下载代码呢?

1.直接在上面这个页面上点download,下载后,解压并进入目录,执行以下命令完成安装

编译源码    python setup.py build
安装源码    python setup.py install

2.直接通过pip安装

pip3 install paramiko #paramiko 是模块名

pip命令会自动下载模块包并完成安装。

pip命令默认会连接在国外的python官方服务器下载,速度比较慢,你还可以使用国内的豆瓣源,数据会定期同步国外官网,速度快好多

sudo pip install -i http://pypi.douban.com/simple/ paramiko --trusted-host pypi.douban.com   # paramiko 是模块名

下载后,直接导入使用就可以,跟自带的模块调用方法无差,演示一个连接linux执行命令的模块

import paramikossh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.224.101", 22, "root", "   ")stdin, stdout, stderr = ssh.exec_command("df")
print(stdout.read().decode("utf-8"))
ssh.close()

输出

文件系统               1K-块    已用     可用 已用% 挂载点
/dev/mapper/cl-root 17811456 7775084 10036372   44% /
devtmpfs              488272       0   488272    0% /dev
tmpfs                 499300       0   499300    0% /dev/shm
tmpfs                 499300   19344   479956    4% /run
tmpfs                 499300       0   499300    0% /sys/fs/cgroup
/dev/sda1            1038336  171112   867224   17% /boot
tmpfs                  99864       0    99864    0% /run/user/0

包(Package)

当你的模块文件越来越多,就需要对模块文件进行划分,比如把负责跟数据库交互的都放一个文件夹,把与页面交互相关的放一个文件夹。

.
└── my_proj├── crm #代码目录│   ├── admin.py│   ├── apps.py│   ├── models.py│   ├── tests.py│   └── views.py├── manage.py└── my_proj #配置文件目录├── settings.py├── urls.py└── wsgi.py

像上面这样,一个文件夹管理多个模块文件,这个文件夹就被称为包

包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。

注意,在python3里,即使目录下没__int__.py文件也能创建成功,猜应该是解释器优化所致,但创建包还是要记得加上这个文件。

跨模块导入

.
├── __init__.py
├── crm
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── tests.py
│   ├── views.py
├── manage.py
└── proj├── __init__.py├── settings.py├── urls.py└── wsgi.py

根据上面的结构,如何实现在crm/views.py里导入proj/settings.py模块?

直接导入的话,会报错,说找到不模块

是因为路径找不到,proj/settings.py 相当于是crm/views.py的父亲(crm)的兄弟(proj)的儿子(settings.py),settings.py算是views.py的表弟啦,在views.py里只能导入同级别兄弟模块代码,或者子级别包里的模块,根本不知道表弟表哥的存在。

添加环境变量,把父亲级的路径添加到sys.path中,就可以了,这样导入 就相当于从父亲级开始找模块了。

绝对导入&相对导入

在linux里可以通过cd ..回到上一层目录 ,cd ../.. 往上回2层,这个..就是指相对路径,在python里,导入也可以通过..

在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。

文件夹被python解释器视作package需要满足两个条件:

  1. 文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。
  2. 不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

注:虽然python支持相对导入,但对模块间的路径关系要求比较严格,处理不当就容易出错,so并不建议在项目里经常使用。

python 路径往上一层_Python常用模块之模块、包介绍和相关语法相关推荐

  1. 用python的tkiner写计算器_Python(10)--利用tkinter模块实现一个简单的计算器功能

    #引入相关模块(math模块和tkinter模块) importmathimporttkinterclassMyCalculator:#初始化对象 def __init__(self):#设置主界面 ...

  2. python是动态还是静态_python之静态方法和动态方法介绍

    这篇文章主要为大家深度剖析了python之静态方法和动态方法介绍的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下# -*- coding: utf-8 -*- ""&q ...

  3. python 文件和目录基本操作_Python常用的文件及文件路径、目录操作方法汇总介绍...

    python的文件和路径操作函数基本上位于os和os.path模块中. os.listdir(dirname):列出dirname下的目录和文件 os.path.isdir(name):判断name是 ...

  4. python外部库是什么_Python 常用外部模块详解

    RabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统,他遵循Mozilla Public License开源协议,MQ全称为Message Queue,消息队列(MQ) ...

  5. python内置模块重要程度排名_python常用内置模块

    #持续更新 #在使用内置模块的时候需要导入,例如import abc,则导入abc模块,当然模块也可以自己写,相当于一个类,后面放到类里说,这个因为环境闲置,有些无法执行,只能理解了 #os系统操作 ...

  6. python获取系统时间函数_Python常用时间操作总结【取得当前时间、时间函数、应用等】...

    本文实例讲述了Python常用时间操作.分享给大家供大家参考,具体如下: 我们先导入必须用到的一个module >>> import time 设置一个时间的格式,下面会用到 > ...

  7. python标准库怎么用_Python常用标准库使用(一)

    自学python一段时间,之前总是学习基本语法,对Python标准库没怎么接触,所以计划从常用的标准库开始,大体了解一遍,下面是学习过程中的笔记. 一.OS模块 主要对目录.或者文件操作.常用方法如下 ...

  8. python七大神级插件_Python常用插件之BeautifulSoup4使用

    BeautifulSoup4这是一个python的一个库,最主要的功能是从网页抓取数据. 安装 安装BeautifulSoup4库 pip install beautifulsoup4 引入模块 fr ...

  9. python中cookies怎么用_Python中的Cookie模块如何使用

    Cookie 模块,顾名思义,就是用来操作Cookie的模块. Cookie这块小蛋糕,玩过Web的人都知道,它是Server与Client保持会话时用到的信息 切片. Http协议本身是无状态的,也 ...

最新文章

  1. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
  2. ovs-ofctl: s1 is not a bridge or a socket 解决方法
  3. 浅析如何让网站建设更具新颖?
  4. Installshield在安装结束时刷新系统
  5. python找出文本的位置和替换_python查找文本文档中特定间隔位置的字符并替换
  6. oracle open for using的用法,oracle OPEN FOR [USING] 语句
  7. Vmware15的安装(ps解决:重装Vmware出现无法安装服务Vmware Authorization Service)
  8. SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)
  9. linux 禁用日志,清除linux系统日志,禁用linux系统日志,删除linux日志
  10. C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)(转载)...
  11. Activity-数据状态的保存
  12. 第 8 天 多线程与多进程
  13. (转)微服务架构 互联网保险O2O平台微服务架构设计
  14. python2还是3好_学Python2还是python3 究竟哪个好
  15. [轉]Exploit Linux Kernel Slub Overflow
  16. opencv2对于读书笔记——二值化——thresholded功能
  17. DNS NoteBook
  18. 解9*9数独算法(C++)
  19. 牛客错题集C++(一)
  20. 奶牛与农夫John与oj

热门文章

  1. 第三次Scream冲刺
  2. Elastic Search 介绍和基本概念
  3. mysql 性能优化索引、缓存、分表、分布式实现方式。
  4. fiddler4 使用教程
  5. zookeeper模拟监控服务节点宕机
  6. Active Directory数据库复制原理
  7. 微软私有云系列----域服务器准备
  8. javascript的匿名函数
  9. .NET基础示例系列之六:委托及事件
  10. php使用 js格式解析,php 无限级数据JSON格式及JS解析_PHP教程