- Python基础及应用
- 吕云翔 姚泽良 张扬等编著
- 5249字
- 2021-10-27 15:16:24
1.2 Python开发环境的搭建与使用
在1.2.1小节会介绍在主流操作系统上如何获取Python,在1.2.2~1.2.5小节会介绍一些帮助我们更有效率地使用Python的工具。
1.2.1 获取Python
在开始探索Python的世界之前,我们首先需要在自己的机器上安装Python。值得高兴的是,Python不仅免费、开源,而且坚持轻量级,安装过程并不复杂。如果使用Linux系统,可能已经内置了Python(虽然版本有可能是较旧的);使用苹果计算机(macOS系统)的话,一般也已经安装了命令行版本的Python 2.x。在Linux或macOS系统上检测Python 3是否安装的最简单办法是使用终端命令,在终端(terminal)应用中输入Python 3命令并按〈Enter〉键执行,观察是否有对应的提示出现。至于Microsoft Windows系统,在目前最新的Windows 10版本上也并没有内置Python,因此必须手动安装。
1.在Windows上安装
访问python.org/download/并下载与计算机架构对应的Python 3安装程序,一般而言只要有新版本,就应该选择最新的版本。这里需要注意的是选择对应架构的版本,为此我们先要搞清楚自己的系统是32位还是64位的,如图1-1所示。
图1-1 Python.org/download页面(部分)
根据安装程序的导引一步步进行,就能完成整个安装。如果最终看到类似图1-2这样的提示,就说明安装成功。
图1-2 Python安装成功的提示
这时检查我们的“开始”菜单,就能看到Python应用程序,如图1-3所示,其中有一个“IDLE”(意为“integrated development environment”)程序,我们可以点击此项目开始在交互式窗口中使用Python Shell,如图1-4所示。
图1-3 安装完成后的“开始”菜单
2.在Ubuntu和macOS上安装
Ubuntu是诸多Linux发行版中受众较多的一个系列。我们可以通过Applicatons(应用程序)中的添加应用程序进行安装,在其中搜索Python 3,并在结果中找到对应的包,进行下载。如果安装成功,我们将在Applications中找到Python IDLE,进入Python Shell中。
图1-4 IDLE的界面
访问python.org/download/并下载对应的Mac平台安装程序,根据安装包的指示进行操作,我们最终将看到类似图1-5的成功提示。
图1-5 Mac上的安装成功提示
关闭该窗口,并进入Applications(或者是从LaunchPad页面打开)中,就能找到Python Shell IDLE,启动该程序,看到的结果应该和Windows平台上的结果类似。
1.2.2 IDLE
前面我们提到了集成开发环境(Integrated Development Environment,IDLE),那么什么是集成开发环境?集成开发环境是一种辅助程序开发人员开发软件的应用软件,在开发工具内部就可以辅助编写源代码文本,并编译打包成为可用的程序,有些甚至可以设计图形接口。
也就是说IDLE的作用就是把跟写代码有关的东西全部打包一起,方便程序员的开发。Python在安装的时候就自带了一个简单的IDLE,在Windows 10下可以通过直接搜索IDLE来启动,如图1-6所示。
图1-6 启动IDLE
对于其他的Windows系统,可以在开始菜单中找到Python的文件夹中选中IDLE启动。
如图1-7所示,我们马上就看到了熟悉的界面。
图1-7 IDLE启动界面
这就是所谓的集成,如果仔细观察上面的菜单栏,可以看到IDLE还有文件编辑和调试功能。接下来通过一个简单的例子来快速熟悉一下IDLE的基础使用和一些Python的基础知识。
1)首先在IDLE中输入以下代码,如图1-8所示。
图1-8 在IDLE中执行代码
这里出现了一个没见过的名字print和一种不同的语法,不用担心,这里只要知道print(...)会把括号中表达式的返回值打印到屏幕上就行了。
2)接下来选择File→New File建立一个新文件输入同样的两行代码,注意输入"print("后就会出现相应的代码提示,而且全部输入后print也会被高亮,这是IDE的基本功能之一,如图1-9所示。
图1-9 在IDLE中输入代码
3)然后选择Run→Run Module来运行这个脚本,这时候会提示保存文件,选择任意位置保存后再运行可以得到如图1-10所示的结果。
图1-10 执行脚本结果
竟然只有一个12450,那么刚才我们输入的第一句执行了吗?事实是的确执行了,因为对于Python脚本来说,运行一遍就相当于每句代码放到交互式解释器里去执行。
那为什么第一句的返回值没有被输出呢?因为在执行Python脚本的时候返回值是不会被打印的,除非用print(...)要求把某些数值打印出来,这是Python脚本执行和交互式解释器的区别之一。
当然这个过程也可以通过命令行完成,比如保存文件的路径是C:\Users\Admin\Desk-top.py\1.py,我们只要在命令提示符中输入python C:\Users\Admin\Desktop.py\1.py就可以执行这个Python脚本,这跟在IDLE中Run Module(执行脚本)是等价的,如图1-11所示。
除了直接执行脚本,很多时候还需要去调试程序,IDLE同样提供了调试的功能,如图1-12所示,我们在第二行上右击可以选择Set Breakpoint设置断点。
图1-11 在命令提示符中执行
图1-12 设置断点
4)然后选择IDLE主窗口的Debug→Debugger启动调试器,然后再在文件窗口的Run→Run Module运行脚本,这时候程序很快就会停在有断点的一行,如图1-13所示。
图1-13 在第二行暂停
5)接下来可以在Debug Control中点击Go继续执行,也可以点击Step步进,还可以查看调用堆栈查看各种变量数值等。一旦代码变多变复杂,这样去调试是一种非常重要的排除程序问题的方法。
总体来说,IDLE基本提供了一个IDE应该有的功能,但是其项目管理能力几乎没有,比较适合单文件的简单脚本开发。
1.2.3 Pycharm的使用
虽然Python自带的IDLE Shell是绝大多数人对Python的第一印象,但如果通过Python语言编写程序、开发软件,它并不是唯一的工具,很多人更愿意使用一些特定的编辑器或者由第三方提供的集成开发环境软件(IDE)。借助IDE的力量,我们可以提高开发的效率,但对开发者而言,没有“最好的”,只有最适合自己的,习惯一种工具后再接受另一种总是不容易的。这里简单介绍一下PyCharm——一个由JetBrain公司出品的Python开发工具,谈谈它的安装和配置。
可以在官网中下载到该软件:
https://www.jetbrains.com/pycharm/download/#section=windows
Pycharm支持Windows、Mac、Linux三大平台,并提供Professional和Community Edition两种版本选择(见图1-14)。其中前者需要购买正版(提供免费试用),后者可以直接下载使用。前者功能更为丰富,但后者也足以满足一些普通的开发需求。
图1-14 PyCharm的下载页面
选择对应的平台并下载后,安装程序(见图1-15)将会导引我们完成安装,安装完成后,从“开始”菜单中(对于Mac和Linux系统是从Applications中)打开PyCharm,就可以创建自己的第一个Python项目了(见图1-16)。
图1-15 PyCharm安装程序(Windows平台)
创建项目后,还需要进行一些基本的配置。可以在菜单栏中使用File→Settings打开Py-Charm设置。
图1-16 PyCharm创建新项目
首先是修改一些UI上的设置,比如修改界面主题,如图1-17所示。
图1-17 PyCharm更改界面主题
在编辑界面中显示代码行号,如图1-18所示。
修改编辑区域中代码的字体和大小,如图1-19所示。
如果是想要设置软件UI中的字体和大小,可在Appearance&Behavior中修改,如图1-20所示。
在运行编写的脚本前,需要添加一个Run/Debug配置,主要是选择一个Python解释器,如图1-21所示。
还可以更改代码高亮规则,如图1-22所示。
图1-18 PyCharm设置为显示代码行号
图1-19 PyCharm设置代码字体和大小
图1-20 调整PyCharm UI界面的字体和大小
图1-21 在PyCharm中添加Python Run/Debug配置
图1-22 编辑代码高亮设置
最后,PyCharm提供了一种便捷的(Package)包安装界面,使得我们不必使用pip或者easyinstall命令(两个常见的包管理命令)。在设置中找到当前的Python Interpreter(解释器),点击右侧的“+”按钮,搜索想要安装的包名,点击安装即可,如图1-23所示。
图1-23 Interpreter安装的Package
1.2.4 Jupyter Notebook
Jupyter Notebook并不是一个IDE工具,正如它的名字,这是一个类似于“笔记本”的辅助工具。Jupyter是面向编程过程的,而且由于其独特的“笔记”功能,代码和注释在这里会显得非常整齐直观。我们可以使用“pip install jupyter”命令来安装。在PyCharm中也可以通过Interpreter管理来安装,如图1-24所示。
图1-24 通过PyCharm安装Jupyter
如果在安装过程中碰到了问题,可访问Jupyter安装官网获取更多信息:https://jupyter.readthedocs.io/en/latest/install.html
在PyCharm中新建一个Jupyter Notebook文件,如图1-25所示。
图1-25 新建一个Notebook文件
点击“运行”按钮后,会要求输入token,这里我们可以不输入,直接点击Run Jupyter Notebook,按照提示进入笔记本页面,如图1-26所示。
图1-26 点击Run Jupyter Notebook后的提示
Notebook文档被设计为由一系列单元(Cell)构成,主要有两种形式的单元:代码单元用于编写代码,运行代码的结果显示在本单元下方;Markdown单元用于文本编辑,采用markdown的语法规范,可以设置文本格式、插入链接、图片甚至数学公式,如图1-27所示。
图1-27 Notebook的编辑页面
Jupyter Notebook还支持插入数学公式、制作演示文稿、特殊关键字等。正因如此,Jupyter在创建代码演示、数据分析等方面非常受欢迎,掌握这个工具将会使我们的学习和开发更为轻松快捷。
1.2.5 强大的包管理器pip
包管理器是什么?常年使用Windows的人可能闻所未闻,但是在编程领域常见的Linux系统生来就伴随着包管理器。本节将学习什么是包,以及为什么专门要用包管理器去管理它。
本章会从包和包管理器的概念和必要性出发,介绍Python中的包管理器pip。
1.包
在介绍包管理器前,先明确一个概念,什么是“包”?
假设有这种场景,A写了一段代码可以连接数据库,B现在需要写一个图书馆管理系统要用A这段代码提供的功能,由于代码重复向来是程序员讨厌的东西,所以A就可以把代码打包后给B使用来避免重复劳动,在这种情况下A打包后的代码就是一个包,或者说这个包是B程序的一个依赖项。简单来说,包就是发布出来的具有一定功能的程序或代码库,它可以被别的程序使用。
2.包管理器
包的概念看起来简单无比,只要B写代码的时候通过某种方式找到A分发的包就行了,然后B把这个包加到了自己的项目中,却无法正常使用,可能的原因是A写这个包的时候还依赖了C的包。于是B不得不再费一番周折去找C发布的包,然而却因为版本不对应仍然无法使用,B又不得不浪费时间去配置依赖关系。
在真正的开发中,包的依赖关系很多时候可能会非常复杂,人工去配置不仅容易出错而且往往费时费力,在这种需求下包管理器就出现了,但是包管理器的优点可远不止这一点。
1)节省搜索时间:很多网龄稍微大一点的人可能还记得早些年百花齐放的“×××软件站”——相比每个软件都去官网下载,用这样的软件站去集中下载软件往往可以节省搜索的时间,包管理器也是如此,所有依赖都可以通过同一个源下载,非常方便。
2)减少恶意软件:刚才其实已经提到了,在包管理器中还有一个很重要的概念是“源”,也就是所有下载的来源。一般来说只要采用可信的源,就可以完全避免恶意软件。
3)简化安装过程:如果经常在Windows下使用各种各样的Installer(安装工具)的话,大部分人可能已经厌倦于点击“我同意”“下一步”“下一步”“完成”这种毫无意义的重复劳动,而包管理器可以一键完成这些操作。
4)自动安装依赖:正如一开始所说,依赖关系是一种非常令人头疼的问题,有时候在Windows上运行软件弹出类似“缺少xxx.dll,因此程序无法运行”的错误就是依赖缺失导致的,而包管理器就很好地处理了各种依赖项的安装。
5)有效版本控制:在依赖关系里还有一点就是版本的问题,比如某个特定版本的包可能需要依赖另一个特定版本的包,而现在要升级这个包,依赖的包的版本该怎么处理呢?不用担心,包管理器会处理好一切。
所以在编程的领域,包管理器一直是一个不可或缺的工具。
3.pip
Python之所以优美强大,优秀的包管理功不可没,而pip正是集上述所有优点于一身的Python包管理。
但是这里有一个问题,正如我们之前看到的那样,Python有很多版本,对应的pip也有很多版本,仅仅用pip是无法区分版本的。所以为了避免歧义,在命令行使用pip的时候可以用pip3来指定Python3.x的pip,如果同时还有多个Python3版本存在的话,那么还可以进一步用pip3.6来指明Python版本,这样就解决了不同版本pip的问题。
我们先启动一个命令提示符,然后输入pip3就可以看到默认的提示信息,如图1-28所示。
这里对常见的几个pip指令进行介绍。
(1)pip3 search
pip3 search用来搜索名字中或者描述中包含指定字符串的包,比如这里输入pip3 search numpy,就会得到如图1-29所示的一个列表,其中左边一列是具体的包名和相应的最新版本,稍后安装的时候就指定这个包名,而右边一列是简单的介绍。由于Python的各种包都是在不断更新的,所以这里实际显示的结果可能会与书本上有所不同。
图1-28 直接输入pip3
图1-29 pip3 search numpy
(2)pip3 list
pip3 list用来列出已经安装的包和具体的版本,如图1-30所示。
(3)pip3 check
pip3 check用来手动检查依赖缺失问题,当然可能会有人质疑:之前不是讲包管理器会自动处理好一切吗,为什么还要手动检查呢?依旧是考虑一个实际场景,比如现在包A依赖包B,同时包B依赖包C,这时候用户卸载了包C,对于包A来说依赖是满足的,但是对于包B来说就不是了,所以这时候就需要一个辅助手段来检查这种依赖缺失。由于我们还没有安装过很多包,所以现在检查一般不会有缺失的依赖,如图1-31所示。
图1-30 pip3 list
图1-31 pip3 check
(4)pip3 download
pip3 download用来下载特定的Python包,但是不会安装,这里以numpy为例,如图1-32所示。
图1-32 pip3 download numpy
要注意的是,默认会把包下载到当前目录下。
(5)pip3 install
当我们要安装某个包的时候,以numpy为例,只要输入pip3 install numpy然后等待安装完成即可,有包管理器的话比较简单高效。pip会自动解析依赖项,然后安装所有的依赖项。
另外由于之前已经下载过了numpy,所以这里安装的时候会直接用缓存中的包进行安装,如图1-33所示。
图1-33 pip3 install numpy
在看到Successfully installed之后即表示安装成功。不过在安装IPython的时候会遇到一个小问题,那就是在Windows和Linux下普通用户是没有权限用pip安装的,所以在Linux下需要获取root权限,而在Windows下需要一个管理员命令提示符。如果安装失败并且提示了类似“Permission denied”的错误,请务必检查用户权限。
当然还有一个问题,这里下载的源是什么呢?其实是Pypi,一个Python官方认可的第三方软件源,它的网址是https://pypi.org/,在上面搜索手动安装的效果是跟pip3 install一样的。
(6)pip3 freeze
pip3 freeze用于列出当前环境中安装的所有包的名称和具体的版本,如图1-34所示。
图1-34 pip3 freeze
pip3 freeze和pip3 list的结果非常相似,但是很重要的一个区别是,pip3 freeze输出的内容对于pip3 install来说是可以用来自动安装的。如果将pip3 freeze的结果保存成文本文件,例如requirements.txt,则可以用命令pip3 install-r requirements.txt来安装所有依赖项。
(7)pip3 uninstall
pip3 uninstall用来卸载某个特定的包,要注意的是这个包的依赖项和被依赖项不会被卸载,比如以卸载numpy为例,如图1-35所示。
图1-35 pip3 uninstall numpy
看到Successfully uninstalled就表示卸载成功了。