Python进阶教程m1–模块(module)

原文链接:http://www.juzicode.com/archives/576

Python越来越受大家欢迎的一个最大原因就是其生态环境的丰富,截至到目前(2020.6)在Pypi官网(pypi.org)上已经有241926个项目,1912846个发布版本。

在Python解释器发布的时候内部会集成一些标准的模块,这些模块是经过Python官方严格测试后和解释器一起发布的,经过了充分的验证。选用合适的模块可以加快项目进度,避免重复“造轮子”。

打开Python安装路径,找到lib文件夹下,有很多文件夹和.py文件,这些就是Python发布的标准模块:

导入库文件方式

导入模块的方式有如下几种:

(1)import module            #导入模块
(2)import module  as  alias  #as后面跟模块别名,适用一些长名字模块
(3)from module import *      #导入模块中所有的函数、类或者变量
(4)from module import  x,y,z  #导入模块中名称为x,y,z的函数、类或者变量

使用第(1)种方式在调用模块中的函数、类或者变量,需要使用“module名称.”作为前缀,第(2)种方式需要使用“alias别名.”作为前缀,使用第(3)种方式则可以直接使用模块中的函数、类或者变量,而且不能带前缀;第(4)种方式则只能使用模块中的名为x,y或z的函数、类或者变量,而且不能带前缀。下面来看一个例子,打印出模块keyword的kwlist变量保存的Python关键字:

方式(1):

import keyword
print('keyword.kwlist:\n',keyword.kwlist) #调用kwlist,使用keyword.作为前缀

==========结果==========
keyword.kwlist:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

方式(2):

import keyword as kw
print('kw.kwlist:\n',kw.kwlist) #调用kwlist,使用keyword.作为前缀

==========结果==========
kw.kwlist:
 ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

方式(3):

from keyword import * 
print('kwlist:\n',kwlist) #调用kwlist,直接使用kwlist变量名称

==========结果==========
kwlist:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

方式(4):

from keyword import  kwlist
print('kwlist:\n',kwlist) #调用kwlist,直接使用kwlist变量名称

==========结果==========
kwlist:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

安装库文件

相比于pypi官网上的库文件,跟随Python解释器发布的标准库文件数量是非常少的,要使用这些pypi官网上的库文件就需要另行安装,好在Python做了非常方便的pip工具安装这些模块。安装好的模块保存在Lib文件夹的site-packages目录下,下图是一个比较干净的site-packages目录,目前还没有安装其他的第三方模块:

2.1 pip

如果安装Python解释器时选择了Add Path选项(见《Python基础教程1–开发环境》),就可以在cmd命令行下直接使用pip命令进行模块的安装,pip命令的最简单的格式是这样的:

pip  install  modulename

其中modulename是要安装的模块名称,比如安装一个名称为six的模块:

如果出现Successfully installed mudulename的提示信息,表明模块安装成功。同时进入到site-packages目录下,也可以看到出现了相应的文件.py文件或者文件夹:

还有一种方式是使用python -m pip 的命令进行安装,这种方式下pip作为python的一个模块调用,效果是一样的:

python -m pip install  mudulename

Pypi.org毕竟是在国外,有时候下载不太稳定,或者网速比较慢,就可以使用一些国内的源进行安装,不使用官方的源时,需要加入-i选项指明选择的源路径:

pip  install  mudulename  -i  选择的源

这里以豆瓣的源(https://pypi.doubanio.com/simple/)为例:

【注意】网址使用http方式会提示不是安全的连接,安装会出现失败,需要使用https方式安装。

如果觉得每次安装模块都需要写 -i + 网址 的方式太过复杂,可以通过配置文件的方式解决,在Windows系统下如果用户名为juzi,找到目录”c:\users\juzi”或”c:\用户\juzi”,新建文件夹pip,再在pip文件夹下新建一个pip.ini文件,写入如下内容:

[global]
index-url= 你选择的源网址

写好配置文件后,以后每次安装模块就不用再输入-i 选型。

2.2、常用国内源

豆瓣:https://pypi.douban.com/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

2.3、查看安装的模块列表 pip list

E:\juzicode\>pip list
Package           Version
----------------- -------
2to3              1.0
astroid           2.4.2
colorama          0.4.3
iso3166           1.0.1
isort             4.3.21
lazy-object-proxy 1.4.3
mccabe            0.6.1
Pillow            7.1.2
pip               19.2.3
pygame            1.9.6
pylint            2.5.3
PySnooper         0.4.1
pyzbar            0.1.8
setuptools        41.2.0
six               1.15.0
toml              0.10.1
tqdm              4.51.0
wrapt             1.12.1

2.4 pip freeze

查看安装模块和版本,显示的形式是模块名==版本号

推荐阅读:

  1. 非工作路径、非入口路径导入Python自定义模块

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注