1 基本概念
包、库、模块是Python中常用的概念。一般来说,模块指一个包含若干函数定义、类定义或常量的Python源程序文件,库或包指包含若干模块并且其中一个文件名为__init__.py的文件夹。对于包含完整功能代码的单个模块,叫作库也可以,例如标准库re和re模块这两种说法都可以。但一般不把库叫作模块,例如tkinter库包含若干模块文件,此时一般说标准库tkinter而不说tkinter模块。
在Python中,有内置模块、标准库和扩展库之分。内置模块和标准库是Python官方的标准安装包自带的,内置模块没有对应的文件,可以认为是封装在Python解释器主程序中的;标准库有对应的Python程序文件,这些文件在Python安装路径中的Lib文件夹中。如图1中1、2、3所示。
Python官方的标准安装包自带了math(数学模块)、random(随机模块)、datetime(日期时间模块)、collections(包含更多扩展版本序列的模块)、functools(与函数以及函数式编程有关的模块)、urllib(与网页内容读取以及网页地址解析有关的模块)、itertools(与序列迭代有关的模块)、string(字符串操作)、re(正则表达式模块)、os(系统编程模块)、os.path(与文件、文件夹有关的模块)、zlib(数据压缩模块)、hashlib(安全哈希与报文摘要模块)、socket(套接字编程模块)、tkinter(GUI编程模块)、sqlite3(操作SQLite数据库的模块)、csv(读写CSV文件的模块)、json(读写JSON文件的模块)、pickle(数据序列化与反序列化的模块)、statistics(统计模块)、time(时间操作有关的模块)等大量内置模块和标准库(完整清单可以通过官方在线帮助文档https://docs.python.org/3/library/index.html进行查看),但没有集成任何扩展库,程序员可以根据实际需要再安装第三方扩展库。
截至2021年1月,pypi已经收录了超过28万个扩展库项目,涉及很多领域的应用,例如jieba(用于中文分词)、moviepy(用于编辑视频文件)、xlrd(用于读取Excel 2003之前版本文件)、xlwt(用于写入Excel 2003之前版本文件)、openpyxl(用于读写Excel2007及更高版本文件)、python-docx(用于读写Word 2007及更新版本文件)、python-pptx(用于读写PowerPoint 2007及更新版本文件)、pymupdf(用于操作PDF文件)、pymssql(用于操作Microsoft SQLServer数据库)、pypinyin(用于处理中文拼音)、pillow(用于数字图像处理)、pyopengl(用于计算机图形学编程)、numpy(用于数组计算与矩阵计算)、scipy(用于科学计算)、pandas(用于数据分析与处理)、matplotlib(用于数据可视化或科学计算可视化)、requests(用于实现网络爬虫功能)、beautifulsoup4(用于解析网页源代码)、scrapy(爬虫框架)、sklearn(用于机器学习)、PyTorch、tensorflow(用于深度学习)、flask、django(用于网站开发)等几乎渗透到所有领域的扩展库或第三方库。
2 安装扩展库
Python官方提供的安装包只包含了内置模块和标准库,没有包含任何扩展库,开发人员可以根据实际需要再安装和使用合适的扩展库,成功安装之后扩展库文件会存放于Python安装路径的Lib\site-packages文件夹中,如图1中4、5、6所示。Python自带的pip工具是管理扩展库的主要方式,支持Python扩展库的安装、升级和卸载等操作。pip命令需要在命令提示符环境中执行,在线安装扩展库的话需要计算机保持联网状态,该命令常用方法如表1所示,可以在命令提示符环境执行命令“pip -h”查看完整用法。
表1常用pip命令使用方法
pip命令示例 | 说明 |
---|---|
pip freeze | 列出已安装模块及其版本号 |
pip install SomePackage[==version] | 在线安装SomePackage模块,可以指定扩展库版本,如果不指定则默认安装最新版本,使用时把SomePackage替换为实际的扩展名名称,例如jieba、pillow、pypinyin |
pip install SomePackage.whl | 通过whl文件离线安装扩展库 |
pip install --upgrade SomePackage | 升级SomePackage模块到最新版本 |
pip uninstall SomePackage | 卸载SomePackage模块 |
如果使用Anaconda3的话,除了pip之外,也可以使用conda命令安装、更新和卸载Python扩展库。命令conda支持clean、config、create、info、install、list、uninstall、upgrade等子命令,可以使用命令“conda -h”查看具体用法。在开始菜单中依次打开“Anaconda3(64bit)”==>“Anaconda Prompt(Anaconda3)”,如图1-15中箭头3所示。进入Anaconda命令提示符环境,执行conda命令管理扩展库即可。
并不是每个扩展库都有相应的conda版本,如果遇到conda无法装的扩展库,进入Anaconda Prompt(Anaconda3)命令提示符环境使用pip安装之后一样可以在Anaconda3的Jupyter Notebook和Spyder环境中使用。如图2所示。
3 常见问题与解决方法
很多初学者由于不熟悉环境搭建尤其是扩展库的安装,浪费了大量宝贵时间。本节简单介绍一下安装扩展库过程中常见的几种问题以及相应的解决方法。
(1)在线安装失败
如果在线安装扩展库失败,一定要仔细阅读错误信息,这对于解决问题是至关重要的。只有准确地知道发生了什么错误,才有可能找到正确的解决方法。
在线安装失败最大的可能有三个:1)网络不好导致下载失败,2)需要本地安装有正确版本的VC++编译环境,3)扩展库暂时还不支持自己使用的Python版本。对于第一种错误,可以多尝试几次、指定国内源或下载whl文件离线安装。如果出现第二种错误,可以在本地安装合适版本的VC++编译器或者下载whl文件离线安装。对于第三种错误,可以尝试找一下有没有第三方编译好的whl文件可以下载然后离线安装。
在Windows平台上,可以从http://www.lfd.uci.edu/~gohlke/pythonlibs/下载大量第三方编译好的.whl格式扩展库安装文件,如图3所示。此处要注意,一定要选择正确版本(文件名中有cp38表示适用于Python 3.8,有cp37表示适用于Python 3.7,以此类推;文件名中有win32表示适用于32位Python,有win_amd64表示适用于64位Python),并且不要修改下载的文件名。
然后在命令提示符或PowerShell环境中使用pip命令进行离线安装,指定文件的完整路径和扩展名,例如:
pip install psutil-5.6.7-cp38-cp38-win_amd64.whl
在PowerShell环境中,如果要执行当前目录下的程序,需要在前面加一个圆点和一个斜线,例如在Python安装路径中Scripts文件夹中执行上面的命令需要改成下面的格式:
./pip install psutil-5.6.7-cp38-cp38-win_amd64.whl
如果由于网速问题导致在线安装速度过慢的话,pip命令支持指定国内的站点来提高速度,下面的命令用来从阿里云服务器下载安装扩展库jieba,其他服务器地址可以自行查阅。
pip install jieba -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
如果固定使用阿里云服务器镜像,可以在当前登录用户的AppData\Roaming文件夹中创建文件夹pip,在pip文件夹中创建文件pip.ini,输入下面的内容,以后再执行pip命令安装和升级扩展库时就不用每次都指定服务器地址了。
[global]
index-url = http://mirrors.aliyun.com/pypi/simple
[install]
trusted-host = mirrors.aliyun.com
如果遇到类似于“拒绝访问”的出错提示,可以使用管理员权限启动命令提示符,或者在执行pip命令时在最后增加选项“--user”。
(2)安装路径带来的问题
很多初学者会遇到这样的问题:使用pip安装扩展库时明明提示安装成功,使用pip list或pip freeze查看扩展库清单里也有,但在Python开发环境中却一直提示不存在。这样的问题基本上可以肯定是安装路径和使用路径不一致造成的。
注意,如果计算机上安装了多个版本的Python开发环境,在一个版本下安装的扩展库无法在另一个版本中使用。为了避免因为路径问题带来困扰,强烈建议在命令提示符或PowerShell环境切换至相应版本Python安装目录的scripts文件夹中,然后执行pip命令,如果要离线安装扩展库的话,最好也把.whl文件下载到相应版本的scripts文件夹中。简单地说,想在哪个版本的Python中使用扩展库,就到哪个版本的Python安装路径中的Scripts子文件夹中安装扩展库,这样可以最大程度地减少错误。
(3)扩展库自身bug或版本冲突问题
虽然现在这种情况已经越来越少遇到了,但确实还会偶尔发生。不管是多牛的程序员,写出来的代码都有可能会存在bug,这是正常的,Python也不例外。某些扩展库在升级过程中解决原来问题的同时又引入了新的错误,导致某些功能在旧版本中工作正常但在新版本中却无法使用。如果遇到类似的情况,可以查一下扩展库的官方网站的最新消息,或者暂时还原较低的版本,如果水平足够的话也可以自己修改一下扩展库的代码再使用。
编写Python程序时,尤其是使用了扩展库的程序,还可能会遇到的一种情况是,升级扩展库以后原来的程序无法运行了,提示某些属性或方法不存在。这是因为新版本扩展库不再支持原来的用法,这时需要查一下这个扩展库官方网站的更新历史,找到最新的用法然后修改自己的代码。