Python语言凭借其简洁、易读及可扩展性等特点,已成为程序设计领域备受欢迎的语言之一。丰富的Python第三方包(又称“第三方库”)使得Python可以应用于多个领域,气象研究与应用领域也不例外。由NCL转化来的库很大程度地方便了读者的学习。
本书内容由浅入深且针对性强,示例丰富且涉及面广,系统地介绍Python语言的基本语法、高级特征以及与气象应用密切相关的工具包。本书从Python和Linux的基础知识开始讲解,无编程基础或需巩固基础的读者也能阅读;然后介绍气象数据的读取、处理等;接着介绍绘图基础知识与常用的气象绘图方案;继而介绍一些常用气象物理量计算以及统计方法与检验等;最后介绍简易机器学习入门和几种Python计算加速方案。
本书的目标读者为大气科学专业及其相近专业本科及以上的学生、科研人员、从业人员,以及对气象数据处理和可视化感兴趣的爱好者。
近年来,Python成为气象领域重要的数据处理及可视化工具之一。Python是一门开源的高级编程语言,它在多个领域的运用越来越普及和深入。对气象领域来说,Python虽然不是唯一的选择,但就目前而言,它是可以灵活、高效解决绝大部分数据处理及可视化问题的优秀选择之一。
Python具有入门容易、语法简单等优点,它是当下大数据、人工智能、深度学习等领域的热门语言。与这些领域相关的许多常用的、公开的库都是直接基于Python语言进行开发的,这为气象学与计算机科学的有机结合提供了良好的平台。
本书的目标读者为大气科学专业及其相近专业本科及以上的学生、科研人员、从业人员,以及对气象数据处理和可视化感兴趣的爱好者。学习本书并不需要读者具有编程基础,但是有基础的读者学习起来会更加轻松。
本书第1章和第2章介绍Python和Linux的基础知识,特别是第2章介绍的Python语言基础知识对于读者后期熟练地使用Python非常关键,建议无编程基础或需巩固基础的读者仔细阅读。第3章至第7章介绍气象数据的读取、处理等。第8章和第9章介绍Python绘图基础与常用的气象绘图方案。第10章和第11章介绍一些常用的气象物理量计算以及统计方法与检验。第 12 章是简单的机器学习入门。第13章介绍几种Python计算加速方案。
● 第1章 认识Python,介绍Python和Linux的基础知识,包含大多数目标读者应该具备的基础的Linux使用技能方面的知识。
● 第2章 Python语言基础,介绍Python的语言基础。该章帮助读者学会使用Python的简单数据类型和数据结构,并了解Python的闭包和面向对象应用等。
● 第3章 NumPy:Python数值计算之源,介绍NumPy提供的数据结构和功能。NumPy是Python数值计算的一个第三方包,实际上它已经成为Python数值计算的一个事实标准,大多数数值计算的第三方包基于NumPy构建,掌握NumPy的使用方法能为读者未来便捷地处理数据打下坚实基础。
● 第4章 pandas:优秀的数据分析工具,介绍pandas提供的数据结构和功能。pandas是一种基于NumPy的结构化数据分析工具,尤其适用于处理站点数据,对时间相关的站点数据支持良好。
● 第5章 栅格数据处理,介绍xarray提供的数据结构和功能。xarray是一种基于NumPy的栅格数据分析工具,受pandas启发,它适用于处理多维度的栅格数据,同时对时间相关的数据支持良好。
● 第 6 章 常用气象数据读取和预处理,介绍一些读者经常会遇到的气象数据相关的文件的读取方式。由于各种标准化和非标准化的文件格式非常多,因此该章将介绍在多数非常见场景下的读取思路,特别是如果遇到非标准化的二进制文件,需要读者自己根据文件格式定义进行对应的读取。
● 第7章 气象数据插值,介绍经常使用的数据插值方案。
● 第8章 Python绘图基础,介绍Matplotlib和cartopy的绘图基础知识,为后续读者提高绘图能力打下基础。
● 第9章 基本绘图类型与气象绘图,结合实际需求对常用绘图方案进行讲解。
● 第10章 常用气象物理量计算,介绍如何计算气象领域常用的物理量。
● 第11章 常用气象统计方法与检验,介绍如何实现气象领域常用的统计方法与检验。
● 第12章 机器学习初探,初步介绍如何使用Python进行机器学习研究,更多具体的实现需要读者结合自己的需求进一步研究。
● 第13章 计算加速与Fortran绑定,介绍CPython中常见的几种计算加速方案。由于CPython解释器本身的性能限制,在实现某些自定义算法时会遇到性能瓶颈。该章初步介绍CPython中常见的计算加速方案,对于想实现特殊算法的读者可能会有一定的帮助。
截至本书成稿时,Python语言与书中所用到的各种第三方包都处于积极发展状态,开发者会不断地对Python语言和各种第三方包的使用进行优化或修改。读者在使用时并不一定需要完全以书中介绍的版本作为唯一依据,新版本通常会添加很多有价值和有趣的功能。
1.Python版本
Python 3.7.10
2.第三方包
(1)数值计算包
● NumPy 1.20.1
● SciPy 1.6.0
● pandas 1.2.2
● xarray 0.17.0
(2)shapefile和几何多边形包
● GeoPandas 0.9.0
● Shapely 1.7.1
(3)绘图包
● Matplotlib 3.3.4
● cartopy 0.18.0
(4)气象工具包
● MetPy 1.0
● PyKrige 1.5.1
(5)数据读写依赖包
● cfgrib 0.9.8.5
● xlrd 2.0.1
● openpyxl 3.0.6
● netCDF4 1.5.3
(6)计算加速包
● Cython 0.29.22
● Numba 0.52.0
3.深度学习框架
PyTorch 1.8.0
4.代码编辑器
Jupyter 1.0.0
本书提供的代码读者可以直接使用在自己的程序中,不需要获得额外的许可。但是我们希望当本书对你的相关研究或生产有所帮助时,能够得到对应的引用说明,一般包括书名、作者、出版社和ISBN等。
由于创作团队的能力所限,本书的内容不免出现欠妥之处,请读者见谅。
我们衷心祝愿广大读者可以轻松、顺利地阅读本书,体会到利用Python在气象领域学习、科研和工作所带来的轻松与便捷。
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
您可以扫描右侧二维码并发送“59400”添加异步助手为好友获取配套资源。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,单击“提交”按钮即可,如右图所示。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/ selfpublish/submission即可)。
如果您所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社几十年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。
异步社区
微信服务号
当下,Python是一种在数据科学领域较为流行的程序设计语言。使用Python可以使我们更加关注要解决的问题,而不用花费太多精力处理计算机运行的复杂性方面的问题。Python 3是相对于已经结束官方支持的Python 2的更新版本。在使用Python编程的用户群体里流传着这样一则“笑话”:有人会两种语言,一种是Python 2,另一种是Python 3。虽然是一则“笑话”,但这也让我们意识到,尽管Python从版本2升级到版本3并没有造成整个程序语言的变化,但升级产生的改变还是带来了一定程度的用户迁移门槛和程序兼容性问题。大多数科学计算包的新版本只支持Python 3,因此本书以Python 3进行讲解。
Python是一种解释型语言,在Python中可以立即运行代码并获得结果,而不需要编译。与解释型语言相对的是编译型语言,例如C/C++、Fortran等。解释型语言需要一种名为解释器的程序作为运行载体。这里我们使用的Python解释器是由官方(Python软件基金会)负责开发的名为CPython的解释器(因为这个解释器由C语言编写,所以叫CPython),它是使用广泛且兼容性强的Python解释器(Python解释器有多种开源实现,但是兼容性和性能有所差异,后文的Python解释器在未额外声明的情况下均指CPython解释器)。本书建议通过Miniconda来安装CPython。Miniconda仅包含CPython和conda(一个相当优秀的包管理工具),对于其他软件包则可根据需要下载并安装。
实际上CPython的代码执行性能并不出色,但是得益于CPython与C语言良好的互操作性,需要计算性能的部分可以用编译型语言编写,在Python代码中进行调用,以达到运行性能与编写效率的最优化。本书还会介绍几种Python代码的运行优化办法。
现阶段Python已经有不少功能完善的关于地球科学的库,在科学计算和机器学习方面也拥有相当丰富的开源工具支持,气象研究人员使用Python将获得多个领域强大工具的帮助。
Python开源社区创造了一种基于Web的Jupyter Notebook工具,使用户通过Python编写代码可获得交互式体验。得益于Web技术,Jupyter可以做到“一处部署,到处运行”,更加适合科研。后文将会详细讲述Jupyter。
由于Python在地球科学领域的广泛应用,美国国家大气研究中心(National Center for Atmospheric Research,NCAR)已经决定停止为NCL(NCAR Command Language)开发新功能且将其已有功能逐步迁移到Python。NCL开发组为此创建了一个名为GeoCAT(地球科学社区分析工具包)的项目,其中包含4个子项目:PyNGL、PyNIO、wrf-python和GeoCAT-comp。这4个子项目中只有wrf-python支持Windows操作系统。
PyNGL是基于NCL绘图组件的Python接口。但是对Jupyter没有原生支持,而且不支持Windows操作系统,所以后文将使用应用更为广泛的“Matplotlib+cartopy”作为绘图工具进行讲解。
PyNIO是基于NCL的文件读写Python接口,不支持Windows操作系统。
wrf-python是天气研究与预报(Weather Research and Forecasting,WRF)模式的处理库,支持Windows操作系统。
GeoCAT-comp是NCL语言中计算函数的迁移,不支持Windows操作系统。
Miniconda是一种轻量级的发行版Python运行环境,它只包含conda和Python。后文我们会根据实际的需求手动安装新的第三方包。
有些读者可能听说过Anaconda,这是由Anaconda公司出品的发行版Python运行环境。Anaconda除了包含conda和Python,还预置了大量用于科学计算的包。Anaconda的缺点是安装包体积巨大,如Anaconda3-5.3.1的安装包体积已经超过600MB,安装后将占据超过3GB的磁盘空间。同时由于预置环境中安装包依赖复杂,在安装新的第三方包时容易出现依赖冲突而导致安装失败。
而Miniconda和Anaconda的一个共同点就是包含conda。conda是一个运行在Windows、macOS和Linux上的跨平台开源包管理器,虽然它是用Python编写的,但是它可以管理其他任何语言的包和运行库。在conda中可以设置完全独立的环境来运行不同版本的Python,且不影响系统原生的Python环境。pip也是Python中应用较为广泛的包管理器。与conda不同的是,pip只能管理Python的包,对Python本身和其他语言的二进制包没有管理能力,但是pip与conda并不冲突,我们在后文中会优先使用conda,在少数情况(例如某个包只在pip中分发,conda中没有)下才会使用pip。
在Linux系统中,Python会作为系统级依赖被默认安装在系统中。但是因为系统级的Python在很多时候与其他系统组件相互依赖,随意改动容易导致系统运行出现问题,所以不建议使用系统级的Python作为开发环境或在不清楚相关风险的情况下修改系统自带的Python运行环境。
Miniconda安装成功之后,会自带一个名为base的虚拟环境。这个虚拟环境包含conda本身,为了避免对这个环境的修改造成conda运行异常,通常我们会单独创建环境后使用,而且创建的独立环境还可以自由控制Python版本,做到兼容性最大化。
下载安装包的过程如下所示。
(1)在搜索引擎中搜索清华大学开源软件镜像站,如图1-1所示,进入清华大学开源软件镜像站。
图1-1 清华大学开源软件镜像站搜索结果
(2)在清华大学开源软件镜像站中单击anaconda,如图1-2所示。
图1-2 单击anaconda
(3)单击miniconda,如图1-3所示。
图1-3 单击miniconda
(4)往下拖动滚动条,找到并下载与自己的系统对应的且版本最新的Miniconda安装包,如图1-4所示。
图1-4 下载最新版Miniconda安装包
版本号中的py39指内置的Python版本为3.9版本(此处Python版本不重要,后文将介绍通过conda单独新建3.7版本的Python环境)。
这里需要注意的是,版本号中的Linux-ppc64le是指使用64位PowerPC架构的CPU的Linux系统。目前市场上很少销售基于PowerPC的个人计算机,所以大多数读者不需要下载相应版本的Miniconda。
版本号中的Windows-x86表示该版本同时适用于32位和64位的Windows系统。但是如果内置的Python为32位版本,即使在新建的conda虚拟环境内,它也将被固定为32位版本。32位版本的Python受到客观条件限制,使用的内存将不能超过2GB,这对于数据计算可能存在内存溢出的问题。所以在确定使用的Windows系统为64位的情况下,建议安装x86_64版本的Miniconda。
(5)将下载的安装包上传到需要安装的目标机器上,如果是本机安装则跳过此步骤。
若在Linux系统上安装,可以将安装包存到~/Downloads文件夹(如果不存在可以创建)下。
在Linux环境中安装Miniconda的步骤如下。
(1)在Downloads目录中执行ls命令,可以看到下载到本地的Miniconda安装包,如图1-5所示。
(2)输入bash+安装包全名,例如这里的bash Miniconda3-py39_4.9.2-Linux-x86_64.sh,如图1-6所示,并按Enter键。
图1-5 下载到本地的Miniconda安装包
图1-6 使用bash命令执行安装包
(3)接下来将会逐条展示用户协议,可使用Enter键逐条跳过,直到看到Do you accept the license terms? [yes|no]或者Please answer 'yes' or 'no'时,输入yes并按Enter键,如图1-7所示。
(4)接下来会要求选择Miniconda的目标安装目录,这里直接按Enter键,即可使用安装程序自动生成的安装目录(这个目录根据不同的用户名和不同的~路径有所不同,不必要求与图1-8完全一致)。如果有选择其他目录的需求,可以输入目标目录。按Enter键之后会开始安装,等待即可,如图1-8所示。
图1-7 同意用户协议
图1-8 指定Miniconda安装目录
(5)出现Do you wish the installer to initialize Miniconda3 by running conda init? [yes|no]时意味着安装完成。输入yes并按Enter键,即可添加conda环境初始化相关代码到终端初始化脚本中,如图1-9所示。
(6)显示Thank you for installing Miniconda3!表示安装完成,重启终端可以自动激活base环境。使用conda -V可查看已安装的conda版本,使用python -V可查看已安装的Python版本,如图1-10所示。
图1-9 启用conda的自动初始化
图1-10 在base环境中查看conda和Python的版本
在Windows环境中安装Miniconda的步骤如下。
(1)可以在存放Miniconda的安装包的文件夹中看到该安装包,如图1-11所示。
图1-11 Windows下的Miniconda安装包
(2)双击安装包,启动安装程序,并单击Next按钮,如图1-12所示。
图1-12 Miniconda安装界面
(3)在用户协议界面单击I Agree按钮,如图1-13所示。
图1-13 同意用户协议
(4)选择Just Me单选按钮,并单击Next按钮,如图1-14所示。
(5)这里使用默认安装目录(该目录根据不同的用户名有所不同,不必要求与图1-15中完全一致),并单击Next按钮。
(6)此处保持默认设置,直接单击Install按钮,如图1-16所示。
图1-14 选择安装类型
图1-15 使用默认安装目录
图1-16 保持默认设置
(7)安装过程如图1-17所示,安装结束则单击Next按钮。
图1-17 安装过程
(8)取消勾选Anaconda Individual Edition Tutorial和Getting Started with Anaconda这两个复选框,并单击Finish按钮完成Miniconda的安装,如图1-18所示。
图1-18 取消勾选两个复选框
(9)安装完成后可以在开始菜单中找到Anaconda Prompt (miniconda3)(见图1-19),这将是后续所有在Windows系统上执行Python命令的命令行终端,如图1-20所示。虽然后续将只用Linux做示范,但是在Windows系统中使用Anaconda Prompt (miniconda3)作为命令行终端也可以达到同样的效果。
图1-19 Windows开始菜单中的Anaconda Prompt(miniconda3)
图1-20 Miniconda在Windows系统中的命令行终端
由于 conda 和 pip 有时候会出现下载缓慢或无法连接的问题,因此需要使用国内开源组织提供的第三方镜像源来代替官方源,以获得更好的使用体验。
这里先对conda镜像源进行如下修改。
(1)打开终端(Linux)或在Windows系统的开始菜单中打开Anaconda Prompt (miniconda 3)。
(2)使用网页浏览器访问清华大学开源软件镜像站首页,找到anaconda并单击其右侧的问号图标,如图1-21所示。
图1-21 找到anaconda并单击其右侧的问号图标
(3)根据页面内容的指引,更新~/.condarc文件(Linux)或C:\Users\用户名\.condarc(Windows)中的内容,如图1-22所示,即可完成conda镜像源修改。
设置pip镜像源的步骤如下所示。
(1)在浏览器中返回清华大学开源软件镜像站首页,找到pypi并单击其右侧的问号图标,如图1-23所示。
(2)根据指引在前面打开的命令行终端中输入命令并执行,设置pip镜像源,如图1-24所示。
由于前文介绍安装的Miniconda版本中Python所带的pip的版本已经超过10.0.0版本,所以不需要执行第一行升级命令,可以直接执行第二行命令以设置镜像源。
图1-22 conda镜像源设置指引
图1-23 找到pypi并单击其右侧的问号图标
图1-24 pip镜像源设置指引
conda通过环境(environment)来解析不同的Python或二进制工具,每种环境都可以安装不同版本的Python或者其他conda镜像源里包含的分发包(例如NCL和Fortran,在conda环境里甚至可以安装编译器的二进制包)。Miniconda安装完成后会自带名为base的虚拟环境,为了保证conda的运行正常,一般情况下不对base环境进行修改。
在命令行中执行conda env list命令可以看到本机中已有的conda虚拟环境,如图1-25所示。路径前带*
的环境表示当前已经激活的环境(后文将详细介绍创建环境的步骤)。
图1-25 当前已有的conda虚拟环境
由于很多第三方包对最新版Python的支持力度不一致,而且为了避免对base环境的修改造成conda运行异常,我们通常会新建某个特定版本的Python的运行环境。
(1)打开命令行终端,输入conda create -n jupyter -c conda-forge python=3.7并按Enter键,等待conda收集包的元信息并解析依赖,如图1-26所示。
图1-26 新conda虚拟环境创建命令
● create为创建新环境的命令。
● -n jupyter指定新环境名为jupyter。可以根据自己的需要任意修改环境名。
● -c conda-forge指定通道(channel)为conda-forge。conda-forge是一个开放的conda“包仓库”。
● python=3.7指定这个环境中安装的Python为3.7.x版本。Python在一个大版本(如3.7版本)中会有很多小版本(如3.7.x)用于修复bug,但是不影响兼容性。这里不指定小版本号中的x,将会安装最新的Python小版本。
(2)环境解析完成后,显示安装动作将会导致的环境变化,如图1-27所示,根据提示按Enter键开始新环境创建。
图1-27 创建新环境将会安装的包
(3)至此新环境创建完成,如图1-28所示。
图1-28 新环境创建完成
之前我们创建了一个名为jupyter(或者是你自己取的名字)的环境。使用该环境时,需要先对其进行激活。
在命令行中执行conda activate + 环境名,例如这里执行conda activate jupyter即可激活jupyter环境。激活对应的环境后,命令行提示符左侧会显示当前环境名,如图1-29所示。可以看到激活环境后,Python版本已经变成前文介绍安装的Python版本。
图1-29 激活环境后python命令对应的Python程序发生变化
激活某环境时,conda会初始化该环境对应的环境变量(这样就可以直接使用Python命令运行虚拟环境中的Python)。
注意,在某环境中使用conda或pip安装的第三方包也只能在该环境中使用。例如在jupyter环境中安装的包,在base环境中是无法使用的,初学者可能需要注意这一点。
对地球科学方面特别是气象方向的研究者或工作人员来说,因为NCL原生只支持Linux和macOS、常使用的高性能计算机的操作系统(通常是Linux系统)等,所以必须对Linux系统的操作有初步的了解。
Bash是Linux上使用较为广泛的一种Shell(Shell是用户与计算机交互的途径之一,它有自己的语法,通常意义上的命令行即指Shell)。当我们打开终端或通过SSH连接上远程计算机后,自动启动的Shell通常便是Bash。
Linux是一种免费的、开源的类UNIX操作系统内核(Linux只是一个系统内核,内核是操作系统的核心,但是内核不能单独使用),使用Linux内核的操作系统统称为Linux操作系统。而使用Linux内核的完整操作系统称为Linux发行版。较为常见的发行版有Ubuntu、Debian、CentOS、RHEL(高性能计算机上较为常见)。
对于个人计算机用户,选择发行版时可以优先选择Ubuntu,因为Ubuntu源下的二进制包较为丰富,使用apt命令就可以安装,非常方便。
不同的发行版采用不同的系统级包管理工具。conda是用户级的包管理工具,不需要root权限而系统级包管理工具需要root权限。Ubuntu和Debian使用apt命令安装二进制包,CentOS和RHEL使用yum命令安装二进制包。此处不对apt和yum命令进行详细讲解,有兴趣的读者可以自行在网上搜索相关内容进行学习(本书后文基本不涉及系统级包管理)。
在Linux操作系统的文件系统中,文件路径分隔符是正斜线/(Windows中是反斜线\),最顶层目录(可理解为文件夹)是/(是的,/也是目录,而且是根目录,区别于Windows操作系统的盘符C:\\)。
在Linux操作系统的任意目录中有两个特殊目录名,即.和..。其中,.指代当前目录,..指代父目录(上一层目录)。对Linux操作系统来说,目录是一种特殊的文件。
例如Linux操作系统中存在一个目录/home/test/abc/,则:
● /home/test/abc/.等同于/home/test/abc/;
● /home/test/abc/..等同于/home/test/;
● /home/./test/abc/等同于/home/test/abc/;
● /home/../home/test/abc/等同于/home/test/abc/。
由/开头的路径为绝对路径,绝对路径不受当前工作目录(使用pwd命令可以查询当前工作目录)位置的影响。
由目录名或文件名开头的路径为相对路径,相对路径受当前工作目录位置的影响。
假设当前工作目录为/home/,则:
● test/abc/等同于/home/test/abc/;
● ./test/abc/等同于/home/test/abc/。
而当工作目录(使用cd命令改变当前工作目录)变更为/home/test/后,则:
● test/abc/等同于/home/test/test/abc/(不存在);
● ./test/abc/等同于/home/test/test/abc/(不存在);
● ../test/abc/等同于/home/test/abc/(存在)。
从上面的例子可以看出,绝对路径有静态的特点,相对路径有动态的特点。
在不同的场景下相对路径和绝对路径有不同的优势,而且错误地选择路径类型会导致路径复杂、兼容性下降且易出错,所以我们需要根据具体的使用需求来选择是使用相对路径还是绝对路径。
注意:在Linux操作系统中,以.开头的文件或目录为隐藏文件或隐藏目录。隐藏目录在使用ls命令展示时需要带上-a或-A选项才可以被展现,ls命令-a和-A选项的区别如图1-30所示。
图1-30 ls命令-a和-A选项的区别
Linux是一个多用户操作系统,需要通过某个确定的用户身份登录后才可使用。每个用户账号都拥有唯一的用户名和各自的密码。通常,在Shell中输入密码并不会有任何显示反馈,但是这并不代表你没有输入字符,这只是一种防偷窥的安全措施。
在绝大多数Linux发行版中,有一个名为root的根用户(系统管理员)。root用户拥有对系统的绝对控制权,包括但不限于可以编辑磁盘上所有用户的文件且无视权限控制和可以强制结束任意用户的任意进程。在大多数Linux发行版中,root用户在系统默认配置下不可以直接登录,因为这可能会导致非常严重的安全问题。
在使用某些需要root权限的命令(例如apt和yum)或编辑系统配置文件(例如某些位于/etc/下的配置文件)时,可以在执行的命令前添加sudo来临时提升权限。sudo命令在当前命令行中第一次执行时会要求输入当前用户的密码。
使用id命令可以查询到执行用户的用户名和用户组信息,如图1-31所示。
图1-31 使用id
命令可以查询当前用户信息
可以看到,在需要执行的命令前加上sudo
之后,该命令的执行用户将会变成root用户,可获得最高权限。
注意:在某些教程中可能会介绍使用su
命令切换为root身份或修改用户配置开启root用户的直接登录。除非你能明白这样做可能带来的风险(root密码泄露导致的所有用户隐私泄露或被植入病毒),否则绝不应该按照这些教程的介绍开启root用户的直接登录。
每个用户都至少归属于一个用户组(一个与用户名同名的用户组,这个用户组在创建用户时被创建),用户组也可以被单独创建。root用户可以将某个用户添加到其他用户组或从某个用户组中删除某个用户。
当一个用户同时属于多个用户组时,这个用户将会获得自己所属的所有用户组所拥有的权限。
使用ls
命令展示某个目录内容时,加上-l
选项,可以查看权限、拥有者、所属用户组等信息,如图1-32所示。
图1-32 使用ls
-
l
可以展示当前目录下的权限、拥有者等信息
此处跳过total
部分,下一行开始为目录下文件或子目录的详细信息。由空格分隔开的每一个部分称作字段。最后一个字段是文件名或目录名。
第一个字段的10个字符表明了这个文件或目录的属性和权限。第一个字段的第一个字符的说明如下:
● “-
”表明这是一个文件;
● “d
”表明这是一个目录(directory);
● “l
”表明这是一个链接文件(类似于Windows中的快捷方式)。
可以看到图1-32中music
第一个字段的第一个字符是d
,所以这是一个目录(也称为文件夹)。
第一个字段的剩余9个字符按从左到右的顺序,每3个为一组权限标志,3组分别对应User、Group和Others的权限。每组的权限字符分别是r
(read),表示读;w
(write),表示写;x
(execute),表示执行;-
表示不拥有这项权限。这里需要注意的是,文件的x
权限用于决定某个用户能否运行这个文件(脚本或二进制程序),目录的x
权限用于决定某个用户能否使用cd
命令进入这个目录。通常也可以用3位数字分别表示User、Group和Others的权限,具体内容在后文chmod
命令部分进行讲解。
User指文件或目录的拥有者,即第三个字段,例如可以看到图1-32中文件和目录的拥有者都是用户sonic。Group指文件或目录所属的用户组,这个用户组下所属的所有用户对应这一段的权限标志,例如root用户组下的所有用户拥有对music目录的rwx(读、写、执行)权限。Others指除了拥有者和所属用户组之外的其他用户。
可以使用chmod
命令改变文件或目录权限,使用chown
命令改变目录文件或目录拥有者和所属用户组。
某些情况下使用者只能远程访问计算机,例如使用高性能计算集群或云服务时,这时通常使用SSH协议来连接目标计算机。SSH协议用于计算机之间的加密连接。加密意味着与服务器之间的连接是安全的,中途被截获并不会导致信息泄露。
通常使用SSH协议连接远程服务器时有两种登录方式:密码登录和公钥登录。
(1)密码登录就是使用用户名和对应的密码进行认证。在密码过于简单的情况下,如果服务器暴露在公网(服务器拥有可以从运营商网络直接连接的IP地址且没有防火墙保护)上,密码将会有被破解的可能。
(2)公钥登录使用密钥对进行认证。SSH密钥对通过非对称加密算法生成一对密钥,分为公钥和私钥。非对称加密意味着使用公钥加密的数据必须使用私钥才能解密,而使用私钥加密的数据必须使用公钥才能解密。同时,不能通过单一公钥或私钥推导出与之对应的私钥或公钥。公钥保存于需要登录的目标服务器~/.ssh/authorized_keys文件中,私钥作为登录凭证需要用户自己妥善保存。通常只要私钥文件不被泄露,就可以杜绝暴力破解。
在某些情况下,为避免重要服务器暴露于公网,用户需要根据要求连接对应的虚拟专用网络(Virtual Private Network,VPN),这样才可以使用远程SSH服务。
在Windows上通常使用MobaXterm工具连接远程服务器;在Linux上则通常使用ssh命令。
Linux中存在3个默认的输入输出源:标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)。
Bash中运行程序或执行命令时默认输出的内容会发送到标准输出,也会从标准输入读取信息。而标准输入、标准输出就是你的命令行终端,程序将需要显示的内容发送到标准输出,命令行终端中便会显示对应的内容;当你在命令行终端中输入字符时,程序便可以在标准输入中读取你输入的内容。标准错误输出也是指输出到终端,通常用于程序或命令输出错误信息或某些重要信息。
输入输出重定向通过在执行命令后面添加重定向操作符来实现,重定向操作符如表1-1所示。其中对于输入输出描述符,0表示标准输入(stdin),1表示标准输出(stdout),2表示标准错误输出(stderr)。
表1-1 重定向操作符
操作符 |
说明 |
---|---|
命令 > 文件 |
以覆盖的方式将标准输出重定向到文件 |
命令 < 文件 |
将标准输入重定向到文件 |
命令 >> 文件 |
以追加的方式将标准输出重定向到文件 |
n > 文件 |
以覆盖的方式将输出描述符为 n 的文件重定向到文件 |
n >> 文件 |
以追加的方式将输出描述符为 n 的文件重定向到文件 |
n >& m |
将输出描述符为n的输出重定向到输出描述符为m的输出 |
n <& m |
将输入描述符为n的输入重定向到输入描述符为m的输入 |
输出重定向可以将程序的输出重定向为特定的文件,也就是说可以将程序或命令原本在终端中显示的内容保存于一个文件中。
例如,command >log.txt 2>&1
表示将command
命令的标准输出保存到log.txt,而且将标准错误输出重定向到标准输出,这样标准输出和标准错误输出的信息都会写入log.txt文件,如图1-33所示。
图1-33 标准输出重定向
c
ommand >log.txt 2>err.txt
表示将command
命令的标准输出保存到log.txt,将标准错误输出保存到err.txt。
输入重定向则可以将程序的标准输入重定向为特定的文件,可以将原本需要手动输入的信息,改为将一个文件中的信息自动输入。
Linux中命令的格式如下:
命令 [选项]... [参数]...
● 命令为命令名称,例如ls
。
● 选项由-
或--
引导,-
后跟单个字母,称为短选项;--
后跟单词,称为长选项。选项可以有自己的参数,例如前文介绍的-n jupyter
。多个没有参数的短选项之间可以省略-(短选项之间的空格也可省略),例如ls -a -l=ls -al
。
● 参数用于描述命令,例如cd /home
中,/home
为cd
命令的参数。
在Linux文档说明中,有统一的符号用于描述命令的选项和参数的情况,如下。
● []
表示内容可选,可以缺少。
● a|b
表示多选一。
● ...
表示前面的内容可以多次重复。
在某些情况下,例如使用apt
命令时临时需要root权限,则可以借助sudo
命令来实现。
sudo
命令的格式如下:
sudo <命令>
sudo
命令可以使后面跟随的命令临时使用root权限来执行。
使用sudo
命令时,需要确认当前用户已被添加到sudoer列表中(添加用户到sudoer列表需要root权限,如果没有则需要联系拥有root权限的管理员)。但是对于自己安装的Linux系统,安装时创建的用户通常已经被系统默认添加到sudoer列表中。
sudo
命令后面跟随的命令的运行身份是root用户,如图1-34所示。
图1-34 sudo
命令可以改变后面命令的运行身份
使用Bash的过程中,通常需要将当前工作目录的路径作为配置参数或运行参数,这时可以通过pwd
命令查看当前工作目录,如图1-35所示。
cd
是Bash中使用较频繁的命令,使用它可以将当前工作目录切换为目标目录,也就是打开某个文件夹,目录参数可以是相对路径也可以是绝对路径,如图1-36所示。
图1-35 使用pwd
命令查看当前工作目录
图1-36 使用cd
命令切换当前工作目录
在Bash中并不会像在Windows中那样直接显示某个文件夹下的子目录或文件,需要使用ls
命令展示当前工作目录或某个指定目录下的文件或目录。
ls [-a|l|r|t|A|F|R] [目录]
● -a
:显示所有文件及目录,包括以.
开头的隐藏文件、当前目录(.
)和父目录(..
)。
● -l
:除文件名称外,同时列出文件形态、权限、拥有者、文件大小。
● -r
:将文件按照英文字母降序列出(默认按照英文字母升序列出)。
● -t
:将文件按照建立时间升序列出。
● -A
:同-a
,但不列出当前目录(.
)和父目录(..
)。
● -F
:在列出的文件名称后加上符号。例如可执行文件后加*
,目录后加/
。
● -R
:递归列出子目录(包括子目录)下的所有文件。
如果省略目录参数,则可查看当前工作目录下的文件,如图1-37所示。
图1-37 使用ls
命令查看当前工作目录下的文件
rm
命令用于删除文件或目录。
rm [-f|r|i] 文件
● -f
:强制删除。
● -r
:将目录包括其之下的子文件和子目录递归删除。
● -i
:删除前逐一询问确认。
删除目录时必须带上-r
选项。
Linux中的目录和文件具有权限属性,与目录或文件权限属性不相匹配的用户将不能执行修改、创建或删除操作。文件的拥有者可以使用chmod
命令修改文件的权限,以方便自己或他人使用。
chmod [-c|f|v|R] [--help] [--version] 权限 文件...
文件的拥有者或root用户可以通过chmod(change mode
)
命令修改文件权限。
● -c
:只有该文件权限确实已经被更改,才显示更改动作。
● -f
:即使该文件权限无法被更改也不显示错误信息。
● -v
:显示权限变更的详细内容。
● -R
:对当前目录下的所有文件与子目录进行相同的权限变更(以递归的方式逐个变更)。
● --help
:显示帮助说明。
● --version
:显示版本信息。
权限参数可以使用符号模式和数字模式。
符号模式的权限参数由3个部分组成:用户类型、操作符和权限符。例如chmod a+x abc.sh
。其中用户类型可以省略,省略时默认用户类型为a。
用户类型如表1-2所示。
表1-2 用户类型
用户类型 |
说明 |
---|---|
u |
user,即文件拥有者 |
g |
group,即所属用户组 |
o |
others,即其他用户 |
a |
all,即所有用户。相当于ugo(省略用户类型时的默认设置) |
操作符如表1-3所示。
表1-3 操作符
操作符 |
说明 |
---|---|
+ |
为指定用户类型添加权限 |
- |
为指定用户类型取消权限 |
= |
将指定用户类型的权限设定为明确值 |
权限符如表1-4所示。
表1-4 权限符
权限符 |
说明 |
---|---|
r |
读 |
w |
写 |
x |
执行 |
例如,chmod +x abc.sh
表示为abc.sh文件添加针对所有用户的执行权限,等价于chmod a+x abc.sh
和chmod ugo+x abc.sh
;chmod o-w abc.sh
表示针对其他用户取消为abc.sh文件写入的权限。
数字模式用3个数字分别代表拥有者、用户组和其他用户的权限,如表1-5所示。例如chmod 750 abc.sh
。
表1-5 权限对应的数值及说明
权限 |
数值 |
说明 |
---|---|---|
r-- |
4 |
读 |
-w- |
2 |
写 |
--x |
1 |
执行 |
rw- |
6 |
读+写 |
r-x |
5 |
读+执行 |
-wx |
3 |
写+执行 |
rwx |
7 |
读+写+执行 |
--- |
0 |
无权限 |
实际上对于数字模式的权限只需要记住r=4、w=2和x=1,就可以推算出其他权限所对应的数值。例如,rwx
对应的数值是4+2+1,也就是7。
参数中3个数按顺序分别代表的是拥有者、用户组和其他用户所拥有的权限。
例如,chmod 750 abc.sh
表示针对拥有者设定读、写、执行权限,针对用户组设定读、执行权限,针对其他用户设定无权限。
Linux中的目录和文件除了有权限属性,还有拥有者属性和用户组属性。文件的拥有者对文件有最大权限,可以修改文件的权限属性。某些情况下可能会需要修改文件或目录的拥有者,这时可以使用chown
命令。注意,chown
命令通常只能以root用户的身份执行。
chown [-c|f|h|v|R] [--help] [--version] user[:group] 文件...
● -c
:显示更改部分的信息。
● -f
:忽略错误信息。
● -h
:修复符号链接。
● -v
:显示详细的处理信息。
● -R
:处理指定目录以及其子目录下的所有文件。
● --help
:显示帮助说明。
● --version
:显示版本信息。
● user
:新的文件拥有者的用户名。
● group
:新的文件所属用户组的名称。
c
hown
命令需要root权限才可以执行,所以如果以非root用户的身份登录,则需要在前方添加sudo
命令。如果以非root权限执行该命令,则会提示Operation not permitted
,表示缺少权限错误,如图1-38所示。
图1-38 chown命令需要使用root权限
例如,sudo chown root:root abc.txt
表示将abc.txt的文件拥有者改为root用户,所属用户组改为root用户组。
尽管Python自带功能丰富的标准库,但是在地球科学领域,很多时候我们仍需要安装不少第三方包(例如后文会介绍的NumPy),这时使用Python的包管理工具就很重要。Python的包管理工具主要有两个,即conda和pip。
这两个包管理工具在Miniconda发行版中已经默认提供,不需要手动安装。
conda是一个用Python写成的开源包管理工具,它不仅能管理纯Python第三方包,也可以管理带有二进制依赖的Python包(例如NumPy,带有多个其他语言的二进制依赖)甚至其他语言编译的纯二进制包(NCL和GFortran)。同时conda也可以管理完整的Python环境,我们可以通过conda任意创建不同版本的Python虚拟环境。
在conda环境中,可以使用conda
install
命令安装新的第三方包(包括非Python开发的第三方包)。
conda install -c conda-forge 包名 # 安装最新版本的某个包
conda install -c conda-forge 包名=1.2.3 # 安装指定版本的某个包
conda install -c conda-forge '包名>=1.2.3' # 安装不小于最小版本的某个包
conda install -c conda-forge '包名<=1.2.3' # 安装不大于最大版本的某个包
-c conda-forge
表明通道(源)为conda-forge。如果不携带这个参数,则使用默认的default通道。conda-forge通道上的包可能会比default通道上的更新得快,且大部分科学计算库和地球科学领域(包括气象领域)的库都选择使用conda-forge通道发布,所以一般情况下会指定使用conda-forge通道。
这里需要注意,在描述版本号时,如果带有<或>两个符号之一,则包名和版本号两边应带有单引号。这是因为在Bash命令行中,<和>两个符号代表输入输出重定向,需要用引号进行标识来表示普通字符串。
pip是Python上应用广泛的基础的包管理工具。但是pip只能管理Python包,不能管理虚拟环境。由于pip对外部依赖缺乏管理能力,所以对于带有复杂外部依赖的第三方包(通常指科学计算包),使用pip时可能会出现某些依赖缺失或冲突的问题。所以我们应尽可能使用conda管理包,只在conda不提供所需的第三方包时才使用pip。
与conda相似,可以使用pip
install
命令安装新的第三方Python包(pip仅支持Python包的安装)。
pip install 包名 # 安装最新版本的某个包
pip install 包名==1.2.3 # 安装指定版本的某个包
pip install '包名>=1.2.3' # 安装不小于最小版本的某个包
pip install '包名<=1.2.3' # 安装不大于最大版本的某个包
这里需要注意,在描述版本号时,如果带有<或>两个符号之一,则包名和版本号两边应带上单引号。这是因为在Bash命令行中,<和>两个符号代表输入输出重定向,需要用引号包裹以表示普通字符串。
在气象应用领域选用Python的最大优势之一就是Python拥有大量相当好用的代码编辑环境,并且针对科研和工程都有不同的优良选择。这里介绍几款应用广泛且开源或免费的开发工具。
Jupyter是使用Python开发的基于Web(例如Chrome浏览器)的交互式编辑环境,旨在让科学家更轻松地使用Python和数据进行科研,支持Windows、macOS和Linux。Jupyter将是本书后文案例使用的Python编辑环境。
我们可以通过Jupyter编写交互式Python代码进行研究,甚至可以结合Markdown文本和公式进行文档的编写。用Jupyter编写的代码及运行结果保存在名为Notebook的文档中,其文件扩展名为.ipynb。
Jupyter使用了Web技术,这意味着Jupyter被分离为服务器端与浏览器端,服务器端承担运算任务,使用者的所有交互只在浏览器上完成,服务器与浏览器通过网络连接进行通信(如果服务器端运行于本地,则相当于使用者自己的计算机既是服务器又是浏览器)。同时这也意味着,Jupyter可以用于远程部署。例如在远程的高性能计算机上安装Jupyter,使用者在自己的计算机上打开浏览器连接服务器即可使用,并且由于服务器端存在于远程高性能计算机上,所以所有运算任务由服务器端承担,使用者并不需要担心自己的计算机性能不足。
在Jupyter中运行着3种进程:Kernel(核心)进程、Web进程和管理进程,如图1-39所示。
图1-39 Jupyter的运行结构
Kernel进程负责执行计算任务,Kernel进程通常是独立Python解释器进程,在Notebook文档中运行的Python代码都由Kernel进程实现。由于Kernel进程是独立运行的,因此运行代码导致的进程崩溃并不会使整个Jupyter崩溃,只需要在交互界面选择重启Kernel进程即可(由于之前运行的状态会丢失,因此需要重新运行代码块)。在Jupyter中每打开一个Notebook文档,系统都会为这个文档启动一个独立的Kernel进程,可运行的Kernel进程的数量仅受计算资源限制。
Web进程负责与浏览器和Kernel进程通信,Web进程将浏览器发送过来的指令转换为标准的Python代码块交付给Kernel进程运行,同时将Kernel进程返回的计算结果解析成浏览器能读取的数据并发回给浏览器。
管理进程负责监控Kernel进程和Web进程的状态,并根据需求控制Kernel进程的状态。例如,在浏览器上打开一个新的Notebook文档,管理进程会根据需要启动一个新的Kernel进程;或当你在交互界面选择重启Kernel进程时,管理进程会尝试结束前一个Kernel进程,启动一个新的Kernel进程。
Jupyter Notebook可以以网页的方式打开Notebook文件(它可以保存代码、运行的结果和自定义的文本和图片)。在该页面中用户可以直接编写代码和运行代码,运行结果也会在页面下方展示出来。
Jupyter Notebook的首页如图1-40所示。
创建新的Notebook文件并运行简单代码,然后输出,如图1-41所示。
Jupyter Notebook是最早用于创建Notebook文件的交互式计算环境。
图1-40 Jupyter Notebook的首页
图1-41 创建新的Notebook文件并运行简单代码,然后输出
在conda中安装Jupyter Notebook最少只需要一行命令,操作非常简单。
通过conda activate + 环境名进入需要安装Jupyter的虚拟环境,在这个环境中执行以下命令:
"conda install -c conda-forge Jupyter"
等待conda收集安装信息,在询问是否继续时直接按Enter键,即可开始安装,具体消耗时间根据网络状况而定,如图1-42所示。
图1-42 激活环境并安装Jupyter Notebook
Jupyter Notebook支持配置自定义插件,可打造个性化的使用体验,但是即使跳过此步骤也不会影响正常使用。
只需在已经安装有Jupyter Notebook的虚拟环境中分别执行下面两行命令:
"conda install -c conda-forge Jupyter_contrib_nbextensions"
"conda install -c conda-forge Jupyter_nbextensions_configurator"
插件依赖安装好之后,Jupyter Notebook首页选项卡部分多出了一个名为Nbextensions的选项卡,如图1-43所示。
图1-43 Nbextensions选项卡
单击Nbextensions,取消勾选禁止配置插件的复选框,如图1-44所示。
图1-44 启用插件配置
勾选插件前方的复选框,使该项插件前方的复选框为选中状态,即可启用该项插件。单击插件名,然后将浏览器的滚动条拖到下方,则可以看见插件的介绍。
在已经安装Jupyter的虚拟环境中,输入jupyter notebook并按Enter键,执行命令。
这时系统应该会自动打开浏览器并打开Jupyter Notebook的页面。如果没有,则在终端显示的内容中找到地址,并将其复制到浏览器的地址栏中打开即可,如图1-45所示。
图1-45 用于手动打开Jupyter Notebook的链接
需要注意的是,这里是在本机运行Jupyter服务器端,终端中输出的浏览器地址只能在本机打开,如果想要远程访问Jupyter Notebook,还需修改监听IP和端口的相关配置。
在Jupyter Notebook的首页可以选择工作目录。进入工作目录,单击页面右方的New按钮,选择Python 3,会自动打开一个Notebook文档的编辑页面。文档的默认名称为Untitled,在文档的编辑页面内单击文件名可以修改文件名,如图1-46所示。
图1-46 修改Notebook文件的名称
页面下方是代码块或文本块单元(Cell),代码即以单元为单位运行。
单元被选中时是蓝色的,编辑状态下是绿色的。选中单元时可以在工具栏看到单元类型。单击单元类型下拉框可以对其进行修改,如图1-47和图1-48所示。
图1-47 修改单元类型
我们在使用时,一般只使用代码类型和Markdown类型。
在单元里写下第一行代码,如图1-49所示。
图1-48 4种单元类型对应的选项
这时代码并没有被运行,需要按Shift+Enter组合键运行代码(按Ctrl+Enter组合键也可以运行代码,但是不会在运行代码后在下方建立新的空白代码单元)。这时正在被编辑的单元被执行,该单元下方会显示执行结果,同时会建立一个新的空白代码单元,并将编辑状态切换到新的空白代码单元,如图1-50所示。
图1-49 第一行代码
图1-50 输出结果在单元下方显示
当单元类型为Markdown(见图1-51)时,按Shift+Enter组合键则可将原始Markdown文本编译成对应格式的文本,如图1-52所示。
图1-51 Markdown类型的单元
图1-52 实现按Shift + Enter组合键后的Markdown类型的单元
JupyterLab是Project Jupyter的下一代用户界面,包含Notebook的所有功能。它具有模块化结构,可以在其中同时打开多个Notebook文档或文件(文本、图片、Markdown等)。Jupyter Notebook对初学者更为友好,更易于使用,但是当用户熟悉Jupyter Notebook并需要使用更多功能时,JupyterLab便是更好的选择。JupyterLab与Jupyter Notebook可以“完美共存”,所以你也可以选择同时安装它们,随心切换使用。
JupyterLab的主页如图1-53所示。
图1-53 JupyterLab主页
通过conda activate + 环境名进入安装JupyterLab需要的虚拟环境,在这个环境下执行以下命令:
"conda install -c conda-forge Jupyterlab"
插件可以自定义安装,但是跳过插件的安装也不会影响正常使用。
对于JupyterLab,要安装插件则需要在系统中安装Node.js开发工具。
Windows用户可在搜索引擎中搜索Node.js,找到Node.js的官网,在其首页下载适用于自己系统的LTS版本的Node.js开发工具,如图1-54所示。
图1-54 下载Node.js
下载完成之后开始安装。
Ubuntu用户可在命令行中执行以下命令(此处使用了root权限,如果当前用户不在sudoer列表中,则无法执行):
"curl -sL ****://deb.nodesource.***/setup_14.x | sudo -E bash -"
"sudo apt install -y nodejs"
安装完成之后,在JupyterLab页面的最左侧找到形状为拼图块 的图标,并单击该图标,如图1-55所示。
单击Enable启用插件功能,如图1-56所示。
图1-55 单击相应的图标
图1-56 启用扩展插件
图1-56中所示的INSTALLED表示已安装插件,DISCOVER表示插件市场。可以展开DISCOVER选项寻找自己感兴趣的插件,单击插件名下方的Install即可进行安装,如图1-57所示。
图1-57 单击Install进行插件安装
在已经安装JupyterLab的虚拟环境中输入jupyter lab并按Enter键,执行命令。
这时应该会自动打开浏览器并打开JupyterLab的页面,如果没有,则在终端显示的内容中找到地址,并将其复制到浏览器的地址栏中打开即可,如图1-58所示。
图1-58 用于手动打开JupyterLab的链接
需要注意的是,这里是在本机运行Jupyter服务器端,终端中输出的浏览器地址只能在本机打开。与Jupyter Notebook相似,如果想要远程访问Jupyter Lab,还需修改监听IP和端口的相关配置。
在JupyterLab页面左侧可以选择当前工作目录,如图1-59所示。
进入工作目录后,在右侧选择Notebook→Python 3,新建Notebook文档,如图1-60所示。
图1-59 选择当前工作目录
图1-60 新建Notebook文档
与Jupyter Notebook不同的是,JupyterLab不会打开新的页面,而是在当前页面内新建的选项卡中打开Notebook文档,如图1-61所示。
图1-61 JupyterLab在当前页面内打开Notebook文档
开发Jupyter的目的是将其用于数据科学研究,所以一般在代码数量可能会更多的工程型开发中使用Jupyter会显得力不从心,这时使用为工程型开发而生的编辑器是更佳的选择。本书后续案例将以Jupyter作为主要编辑器,所以此处对工程型开发环境工具仅做简单介绍,详细使用方式可以在网络上找到对应教程。
Visual Studio Code是美国Microsoft公司主导开发的开源编辑器;PyCharm是由捷克JetBrains公司开发的Python集成开发环境,社区版可免费开源使用。
Visual Studio Code简称VS Code。VS Code是一个免费开源的现代化轻量级代码编辑器,它并不原生提供对Python代码的支持,但是在安装Python支持插件之后仍然能给用户提供相当优秀的开发体验,支持Windows、macOS和Linux。
在搜索引擎中搜索vscode,如图1-62所示,并进入VS Code的官网。
图1-62 搜索vscode
进入VS Code的官网之后,可以很直观地看到下载按钮,如图1-63所示。
下载安装包,直接安装即可。安装完成后启动VS Code,在界面左侧找到形状是4个方块的插件市场按钮并单击它,如图1-64所示。
图1-63 VS Code下载页面
图1-64 单击相应的按钮
在搜索文本框中输入Python,找到第一个插件,如图1-65所示,并单击其对应的Install。这是VS Code对Python支持的基础插件。
接下来在搜索文本框中输入pylance,找到第一个插件,如图1-66所示,并单击其对应的Install。这是VS Code对Python支持的辅助插件,其提供了基于机器学习的智能代码提示功能。
图1-65 搜索Python支持插件
图1-66 搜索名为pylance的Python扩展支持插件
至此,VS Code与其Python支持插件安装完成。
使用VS Code首次打开以.py为扩展名的Python脚本时,系统会询问是否将Pylance设置为默认语言服务,这时单击“Yes, and reload”将Pylance设置为默认语言服务并重新加载VS Code,如图1-67所示。
单击界面左下角的Select Python Interpreter可以选择需要使用的Python解释器,如图1-68和图1-69所示。
选择对应的Python解释器之后,界面左下角会显示对应的环境名称和Python版本信息,如图1-70所示。
图1-67 将Pylance设置为Python的默认语言服务
图1-68 单击Python解释器选择按钮
图1-69 选择需要使用的Python解释器(这里显示的解释器都由conda虚拟环境创建)
VS Code中有自动补全提示和参数提示,如图1-71所示。
图1-70 显示当前Python解释器的环境名称和Python版本信息
图1-71 VS Code的函数参数提示
PyCharm是专为Python设计的集成开发环境,自带完善的调试、项目管理和智能提示等功能,支持Windows、macOS和Linux。其专业版是收费版本,添加了更多有利于大型工程开发的功能,但是针对个人用户,社区版是免费开源的。
安装过程如下。
在搜索引擎中搜索pycharm,如图1-72所示,并进入其官网的下载页面。
在PyCharm的下载页面中,选择适合系统的版本,单击Community下方的Download按钮,即可下载安装包,如图1-73所示。
图1-72 搜索pycharm
图1-73 PyCharm的下载页面
读者服务:
微信扫码关注【异步社区】微信公众号,回复“e59400”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。