Chapter 2 Python 简介与环境安装

注意,本讲撰写于 Python , Python , Python ,可能会和授课时的版本有所不同,但是基本的语法几乎不会有变化。

2.1 简介

开源程序界总会流传着一些传说,比如 Linux 之父 Linus Torvalds 在卧室一天开发出版本控制软件 git 的核心功能(self-hosting,即用 git 提交 git 代码)。当然 Python 也不例外。1989 年的圣诞节,Python 之父 Guido van Rossum 很是无聊,于是他决定开发一个新的脚本语言,用来取代 ABC 语言。van Rossum 于 1991 年发布了 Python 第一个版本,也就是说到 Python 都已经到了三十而立的年纪了。有关 Python 的不同版本及其之间的关系,以及为什么我们这门课选择 Python 3.11,会在之后的章节展开描述。

2.1.1 Life is short, you need Python!

Python 之父 Guido van Rossum 在 Twitter 分享的一个图片
Python 之父 Guido van Rossum 在 Twitter 分享的一个图片

大家可能或多或少会在各个地方(朋友圈广告,网络培训班,甚至视频分享平台等等)听到过这句话:人生苦短,我用 Python(其实英文原文是 “Life is short, you need Python.”)。这句话的意思是,Python 是一门非常简单易学的编程语言,可以让你在短时间内完成一些复杂的任务。这一节采用这句名言也是希望大家能够在学习 Python 过程中,能够感受到 Python 的简单易学,以及 Python 语言的强大。

2.1.1.1 解释性

如果大家撰写过 C 语言、C++ 语言等,会发现与这些语言不同的是,Python 语言在运行时完全不需要编译,只需要将源代码保存为 .py 文件,然后用 Python 解释器执行即可。这样做的好处是,可以快速迭代代码,而不用每次修改代码后都编译一次。这也是 Python 语言的一个特点,即开发效率高。

2.1.1.2 动态类型

在 C 语言中,你可能见过这样的代码:

int a = 1;

而 Python 语言是一门动态类型语言,这意味着你不需要在代码中声明变量的类型,Python 解释器会自动推断变量的类型。这样做的好处是,可以让代码更加简洁,而不用每次声明变量的类型。比如:

a = 1

这也是 Python 语言的一个特点,即代码简洁。

2.1.1.3 面向对象

首先,要先解释一下什么叫面向过程与面向对象。面向过程是一种编程范式,即将程序看作一系列的函数调用。比如现在有这样的一个问题:计算 1 到 100 的和。而面向对象是另一种编程范式,即将程序看作一系列的对象调用。面向对象的好处是,可以将程序的复杂度降低,让程序更加易于维护。如果用面向过程的编程范式来解决,可能会写出这样的代码:

s = 0
for i in range(1, 101):
    s += i
print(s)

而如果用面向对象的编程范式来解决,可能会写出这样的代码:

class Sum:
    def __init__(self, n):
        self.n = n

    def sum(self):
        s = 0
        for i in range(1, self.n + 1):
            s += i
        return s

print(Sum(100).sum())

这些代码看不懂并没有关系,我们以后还会提到并进行讲解。Python 语言是一门面向对象的语言,这也是 Python 语言的一个特点,即易于维护。

2.1.1.4 垃圾回收

Python 语言的另一个特点是,它有自己的垃圾回收机制。这意味着,当你不再使用某个变量时,Python 解释器会自动回收这个变量所占用的内存空间。这样做的好处是,可以让程序员不用关心内存的分配与回收,而可以更加专注于编写程序。

2.1.2 版本迭代

对于 Python 的版本而言,以 Python x.y.z 为例,大家的共识是 x 代表主版本号,y 代表大版本号(major version),z 代表小版本号(minor version)。

2.1.2.1 大版本号

Python 2.0 版本于 2000 年发布,Python 3.0 版本于 2008 年发布。由于这两个版本各自带来了全新的特性,也成为了 Python 语言的分水岭。Python 2.x 版本于 2020 年停止维护(Python 2.7.18),但是 Python 2.x 版本仍然有很多应用,比如一些老的项目,或者一些不得不兼容 Python 2.x 的第三方库(典型的是 ESRI 的 ArcGIS,仍然在使用 Python 2.7)。

现在市面上主要流行的是 Python 3.x 版本,根据 PEP 602 - Annual Release Cycle for Python 的建议,一个大版本会维护 5 年,从 Python 3.9 开始,每年都会发布一个新的大版本。Python 3.11 版本于 2021 年 10 月发布。

PEP 602 建议的 Python 发布周期
PEP 602 建议的 Python 发布周期

2.1.2.2 小版本号

有一些同学一定已经注意到了,Python 3.11.3 于 2023 年 4 月 16 日(也就是上周)发布。Python 的每一个小版本都是一个补丁版本,它会修复一些 bug,但是很少会添加特性。所以可以认为,Python 的小版本号的差异是不会影响到编程的。

2.2 为什么我会推荐这样的开发环境?

2.2.1 Python 3.11 新特性

Python 3.11 比 Python 3.10 的速度提升了 10%-60%,其他的特性参见 https://docs.python.org/3/whatsnew/3.11.html

2.2.2 Visual Studio Code

Visual Studio Code 是由 Microsoft 开发的一个开源的、跨平台的代码编辑器,它支持多种语言的开发,包括 Python。Visual Studio Code 的主要特点如下:

  • 轻量级:Visual Studio Code 的安装包只有 50MB 左右,而且它的运行内存占用也很小(相对于 Spyder @ Anaconda)。
  • 开源:Visual Studio Code 是一个开源项目,它的源代码托管在 GitHub 上,这也就意味着它免费(相对于 PyCharm)。
  • 跨平台:Visual Studio Code 支持 Windows、macOS 和 Linux 等多种操作系统。
  • 插件化:Visual Studio Code 支持插件化,你可以通过安装插件来扩展它的功能。
  • 高度可定制:Visual Studio Code 支持高度的可定制性,你可以通过修改配置文件来定制它的行为。
  • 快速:Visual Studio Code 的启动速度很快,它的响应速度也很快。

2.2.3 Jupyter Notebook

Jupyter Notebook 是一个支持多语言的交互式笔记本,起初叫做 IPython Notebook,后来由于对 Julia、Python 和 R 三种语言的支持才改名叫 Jupyter Notebook。Jupyter Notebook 可以将一个程序单元格化,每个单元格可以包含代码、文本、图片、视频等内容,你可以在单元格中运行代码,然后查看运行结果。

2.3 环境安装

2.3.1 Python

2.3.1.1 Windows

2.3.1.1.1 物理安装法

首先下载 Python 安装包,以 Python 3.11.3 为例,前往 Python 3.11.3 的下载页面就好了。一般来说,64 位系统下载 64 位安装包,32 位系统下载 32 位安装包。对于 64 位的系统来说,下载 Windows installer (64-bit) 就可以了。

下载完成后,双击安装包,按照提示安装即可。注意,安装时一定要勾选 Add Python 3.10 to PATH 选项,这样就可以在任意目录下使用 Python 命令了。比如,我们使用 powershell 等命令行工具,就可以直接输入 python 命令来启动 Python 解释器了,比如:

PS C:\Users\user> python --version
Python 3.10.7
2.3.1.1.2 包管理器法

本方法只适用于 Windows 10 1709(版本 16299)或更高版本,当然,Windows 11 也可以。

不会吧不会吧,不会还有人不知道 Windows 也有包管理器吧?大家可能多多少少听说过 Chocolatey,它是 Windows 下的包管理器,它可以帮助你安装各种软件,包括 Python。但是我不会推荐 Chocolatey,因为他是第三方的软件。

我在这里会推荐 winget,它是 Windows 官方的包管理器,它可以帮助你安装各种软件,包括 Python。

安装 winget 很容易,在 GitHub 上进入 winget-cli 的发行页面,在最新的发行版本中的 Assets 中点击 Microsoft.DesktopAppInstaller_xxxxxxxx.msixbundle 下载安装即可。

安装完成后,打开命令行工具,输入 winget,如果出现了 winget 的帮助信息,那么恭喜你,你已经成功安装了 winget。

接下来,我们就可以使用 winget 来安装 Python 了。在 Powershell 中输入

PS C:\Users\User> winget install python

就可以安装最新的 Python 了。但是安装之后还得配置环境变量才行(这就是为什么在物理安装法中必须要 Add Python 3.11 to PATH 选项的原因),接下来是配置环境变量的方法。

2.3.1.2 macOS

实际上,如果你在使用 macOS Monterey 12.3 以上的版本,macOS 会自带一个 Python 3.8.9。我们可以通过在终端中查看 Python 的版本信息:

$ python3 --version && which python3
Python 3.8.9
/usr/bin/python3

如果是更早版本的话,还会存在一个 Python 2.7.18。

$ python --version && which python
Python 2.7.18
/usr/bin/python

我们需要使用 Python 3.10 来继续我们的学习。但是不要担心,我们完全没有必要卸载这些 Python 2.7 和 Python 3.8。在实际开发的过程中,多版本 Python 共存是一个很正常的事情。

我们可以通过 Homebrew 来安装 Python 3.10。首先我们来安装 Homebrew,按照 Homebrew 官网的说明,我们可以在终端中运行以下命令:

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

然后我们就可以通过 Homebrew 来安装 Python 3.10 了:

$ brew install [email protected]

安装完成后,我们可以通过 python3.11 命令来查看 Python 3.11 的版本信息:

$ python3.11 --version && which python3.11
Python 3.11.3
/opt/homebrew/bin/python3.11

以下部分可以不做。

现在电脑里有很多 Python3,但是每次还是:

$ python3 --version && which python
Python 3.8.9
/usr/bin/python3

我们可以通过修改环境变量并重命名来让 python3 命令指向 Python 3.11:

$ echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
$ echo 'alias python3="python3.10"' >> ~/.zshrc
$ source ~/.zshrc

这个时候重新开启一个终端(shell 进程),我们就可以通过 python3 命令来查看 Python 3.10 的版本信息了:

$ python3 --version && which python3
Python 3.11.3
/opt/homebrew/bin/python3

2.3.1.3 Linux

一般来说,你既然在使用 Linux 系统的话,你一定了解如何玩转 bash。但是我在这里也再以 debian 系发行版 ubuntu 20.04 为例,来简单介绍一下如何安装 Python 3.11。

debian 系发行版的包管理器是 apt,我们可以通过以下命令来安装 Python 3.11:

$ sudo apt install python3.11

之后的处理方法和 macOS 系统类似。

2.3.2 Visual Studio Code

Visual Studio Code 是一个非常好用的代码编辑器,我们可以通过 Visual Studio Code 官网 来下载安装。(点一下就行的那种)

Visual Studio Code 安装好了之后,为了能够使用 Visual Studio Code 来进行 Python 开发,我们需要额外安装几个插件:

  • Chinese (Simplified) Language Pack for Visual Studio Code - 用于支持中文
  • Python - 用于支持 Python 开发
  • Pylance - 用于支持 Python 开发
  • Jupyter - 用于支持 Jupyter Notebook

2.3.3 Jupyter Notebook

jupyter 只是一个命令行工具,它可以帮助我们启动 Jupyter Notebook。我们可以通过以下命令来安装 Jupyter Notebook:

$ pip install jupyter

安装完成后,我们在 Visual Studio Code 中打开一个目录,在目录中新建一个 *.ipynb 文件,就可以开始使用 Jupyter Notebook 了。

2.4 作业与思考题

  1. 在计算机科学中,为什么会提出垃圾回收这一概念?是为了解决何种问题?
  2. 你还发现了什么有意思的 Visual Studio Code 插件?请分享给大家。
  3. 你在安装环境的时候遇到了什么问题?有没有设法解决?请将你的经验分享给大家。