什么是模块?
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python里,一个 .py 文件就被称之为一个模块(Module)。
使用模块有什么好处?
1.最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。带一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
2.使用模块还可以避免函数名和变量名冲突。每个模块有独立的命名空间,因此相同名字的函数和变量完全可以分别存在不同的模块中,所以,我们自己在编写模块时,不必考虑名字会与其他模块冲突。
模块分类
模块分为三类:
- 内置标准模块(又称标准库)执行 help('models') 查看所有 python 自带模块列表
>>> help('modules') Please wait a moment while I gather a list of all available modules... __future__ _tkinter gettext sched _abc _tracemalloc glob secrets _ast _warnings gzip select _asyncio _weakref hashlib selectors _bisect _weakrefset heapq setuptools _blake2 _winapi hmac shelve _bootlocale abc html shlex _bz2 aifc http shutil _codecs antigravity idlelib signal _codecs_cn argparse imaplib site _codecs_hk array imghdr smtpd _codecs_iso2022 ast imp smtplib _codecs_jp asynchat importlib sndhdr _codecs_kr asyncio inspect socket _codecs_tw asyncore io socketserver _collections atexit ipaddress sqlite3 _collections_abc audioop itertools sre_compile _compat_pickle base64 json sre_constants _compression bdb keyword sre_parse _contextvars binascii lib2to3 ssl _csv binhex linecache stat _ctypes bisect locale statistics _ctypes_test builtins logging string _datetime bz2 lzma stringprep _decimal cProfile macpath struct _distutils_findvs calendar mailbox subprocess _dummy_thread cgi mailcap sunau _elementtree cgitb marshal symbol _functools chunk math symtable _hashlib cmath mimetypes sys _heapq cmd mmap sysconfig _imp code modulefinder tabnanny _io codecs msilib tarfile _json codeop msvcrt telnetlib _locale collections multiprocessing tempfile _lsprof colorsys netrc test _lzma compileall nntplib textwrap _markupbase concurrent nt this _md5 configparser ntpath threading _msi contextlib nturl2path time _multibytecodec contextvars numbers timeit _multiprocessing copy opcode tkinter _opcode copyreg operator token _operator crypt optparse tokenize _osx_support csv os trace _overlapped ctypes parser traceback _pickle curses pathlib tracemalloc _py_abc dataclasses pdb tty _pydecimal datetime pickle turtle _pyio dbm pickletools turtledemo _queue decimal pip types _random difflib pipes typing _sha1 dis pkg_resources unicodedata _sha256 distutils pkgutil unittest _sha3 doctest platform urllib _sha512 dummy_threading plistlib uu _signal easy_install poplib uuid _sitebuiltins email posixpath venv _socket encodings pprint warnings _sqlite3 ensurepip profile wave _sre enum pstats weakref _ssl errno pty webbrowser _stat faulthandler py_compile winreg _string filecmp pyclbr winsound _strptime fileinput pydoc wsgiref _struct fnmatch pydoc_data xdrlib _symtable formatter pyexpat xml _testbuffer fractions queue xmlrpc _testcapi ftplib quopri xxsubtype _testconsole functools random zipapp _testimportmultiple gc re zipfile _testmultiphase genericpath reprlib zipimport _thread getopt rlcompleter zlib _threading_local getpass runpy Enter any module name to get more help. Or, type "modules spam" to search for modules whose name or summary contain the string "spam".
- 第三方开源模块,可通过 pip install 模块名 联网安装
- 自定义模块
模块调用
import module from module import xx from module.xx.xx import xx as rename #有的模块名太长,就重新命名一下,用起来方便 from module.xx.xx import * #将module.xx.xx里的所有模块全部引入,但不推荐,变量名易重复出问题
注意:模块一旦被调用,即相当于执行了另外一个py文件里的代码。
自定义模块
这个最简单,创建一个 .py 文件就可以称之为模块,就可以在另一个程序里导入
模块查找路径
发现,自己写的模块只能在当前路径下的程序里才能导入,换一个目录再导入自己的模块就报错说找不到了,这是为什么?
这与导入路经有关
>>> import sys >>> sys.path #cmd里面打开python,引入模块的搜索路径 ['', 'D:\\Software\\Python\\python37.zip', 'D:\\Software\\Python\\DLLs', 'D:\\Software\\Python\\lib', 'D:\\Software\\Python', 'D:\\Software\\Python\\lib\\site-packages'] #最后一个 site-pages 表示所有的第三方的内置库和自己下载的库都在这里
python解释器会按照列表顺序去依次到每个目录下去匹配你要导入的模块名,只要在一个目录下匹配到了该模块名就立刻导入,不再继续往后找。
注意:列表第一个元素为空,即代表当前目录,所以你自己定义的模块在当前目录会被优先导入。
开源模块安装、使用
https://pypi.python.org/pypi 是 python 的开源模块库,截至2017年9月3日,已经收录了118170个来自全世界python开发者贡献的模块,几乎涵盖了你想用python做的任何事情。事实上每个python开发者,只要注册一个账号就可以往这个平台上传你自己的模块,这样全世界的开发者都可以容易的下载并使用你的模块。
那如何从这个平台上下载代码呢?
- 直接在上面这个页面上点 download ,下载后,解压并进入目录,执行以下命令完成安装
编译源码 python setup.py build
安装源码 python setup.py install
2.直接通过 pip 安装
pip3 install paramiko #parmiko 是模块名
pip命令会自动下载模块包并完成安装。
软件一般会被自动安装到你 python 安装目录的这个子目录里。
/your_python_install_path/3.7/lib/python3.7/site-packages
pip 命令默认会连接在国外的python官方服务器下载,速度比较慢,你还可以使用国内的豆瓣源,数据会定期同步国外官网,速度快好多。
sudo pip install -i http://pypi.douban.com/simple/ alex_sayhi --trusted-host pypi.douban.com #alex_sayhi是模块
使用
下载后,直接导入使用就可以,跟自带的模块调用方法无差,演示一个连接linux执行命令的模块。
#coding:gbk import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.108',22,'alex','123') stdin, stdout, stderr = ssh.exec_command('df') print(stdout.read()) ssh.close() 执行命令 - 通过用户名和密码连接服务器