如何在 Ubuntu 16.04 LTS 上安装 Python?

2025年3月25日 | 阅读 13 分钟

引言

Python 是一种高级、动态、通用编程语言。它由 Python 软件基金会设计和开发。

Python 是一种跨平台语言,于 1991 年 2 月 20 日首次发布。

在本教程中,我们将处理 Python 的安装过程,其中包括以下步骤。

虽然 Ubuntu 默认安装了 Python 2.7,但我们可以安装其他 Python 版本,如 python3。

要安装 python3,只需在终端中键入以下命令,它将自动安装。

Python的历史

Python 由 Guido van Rossum 于 1980 年代末在荷兰的 Centrum Wiskunde & Information (CWI) 创立,作为 ABC 编程语言的替代品,受 SETL 影响,能够与 Amoeba OS 进行接口和异常处理。其实施始于 1989 年 12 月。在 2018 年 7 月 12 日之前,Van Rossum 一直独自负责该项目作为首席开发人员,当时他通过“终身仁慈的独裁者”的职责披露了他的“永久休假”。

2019 年 1 月,Python 的核心开发者们选出了一个由五名成员组成的指导委员会来领导该项目。Python 2.0 版本于 2000 年 10 月 16 日发布,具有许多重大新特性,包括 Unicode 支持、引用计数、循环检测垃圾回收和列表推导式。Python 3.0 版本于 2008 年 12 月 3 日发布,其许多主要特性已反向移植到 Python 的 2.6.x 和 2.7.x 版本。Python 第三版发布了 2to3 工具,该工具实现了 Python 2 代码到 Python 3 的转换。

Python 的特性和设计理念

Python 完全支持结构化编程和面向对象编程,其许多方面支持面向切面编程和函数式编程(包括元对象和元编程)。通过扩展,例如逻辑编程和契约式设计,还支持其他各种范例。

Python 利用循环检测垃圾回收器和引用计数进行内存管理的动态类型解决方案。它利用动态名称解析,在程序执行时绑定变量和方法名称。

它的设计在 Lisp 传统中为函数式编程提供了一些支持。它具有 reduce、map 和 filter 函数,生成器、集合、字典和列表推导式。此外,标准库中有两个不同的模块(functools 和 iteratools),它们具有从 Standard ML 和 Haskell 获取的函数式工具。Python 的哲学概述在一份名为 **_Python 之禅_** 的文件中,其中包含格言。

Python 的语义和语法

Python 被定义为一种易于理解的语言。Python 的格式在视觉上清晰,并且经常使用其他语言使用标点符号的英文关键字。它不使用花括号来界定代码块,并且允许在任何语句后使用分号,但与其他语言不同,很少使用分号。它有一些特殊的 Pascal 或 C 的情况和语法例外。

缩进

Python 使用空白缩进,而不是关键字或花括号,来界定代码块。某些语句后会增加缩进,缩进减少表示当前代码块的完成。因此,程序的视觉结构正确地说明了其语义结构。该方面有时被称为“靠边规则”。

控制流和语句

Python 的一些重要语句是

  • 赋值语句,带有一个等号(=)。
  • if 语句,它假定使用 elif 和 else 运行一个代码块。
  • for 语句迭代可迭代对象,为局部变量分配该块的所有元素。
  • while 语句在条件为真时运行代码块。
  • try 语句允许在由 except 子句处理和捕获的附加块中引发异常。此外,它确保在 finally 块中,清理代码始终被执行。
  • raise 语句重新引发捕获的异常或引发指定的异常。
  • class 语句运行一个代码块,并将局部命名空间附加到面向对象编程中的类。
  • def 语句描述一个方法或函数。
  • with 语句将代码块封装在上下文管理器中,允许类似资源获取即初始化的行为,并替代基本的 finally/try 惯用法。
  • break 语句退出循环。
  • continue 语句跳过当前迭代,继续进行下一次迭代。
  • del 语句删除变量,通过名称删除对值的引用,并在指定变量之前未重新定义时生成错误。
  • pass 语句在语法上要求建立一个空的块,用作 NOP(无操作)。
  • assert 语句用于调试,以检查应该使用的条件。
  • yield 语句从生成器函数返回一个用于操作协程的值。
  • return 语句使用函数返回值。
  • from 和 import 语句用于导入模块,这些模块的变量和函数可以在当前程序中使用。

根据 Van Rossum 的说法,Python 不支持一流的 continuation 或尾部调用优化,而且将来也不会。但是,它的协程类功能通过扩展 Python 的生成器来支持。在 2.5 版本之前,生成器被认为是惰性迭代器,数据是单向从生成器中输出的。从 Python 2.5 开始,可以将数据传回生成器函数,而从 Python 3.3 开始,数据可以从两个或更多堆栈级别传递。

表达式

下面将解释 Python 的表达式

  • 乘法、减法和加法的 *、- 和 + 运算符与其他语言相同。但是,除法运算符的行为不同。Python 中有两种除法:地板除和浮点除。Python 使用 ** 运算符进行指数运算。
  • Python 使用 + 运算符进行字符串连接。Python 使用 * 运算符将任何字符串重复指定次数。
    infix (@) 运算符旨在供包括 NumPy 在内的库用于矩阵乘法。
  • 名为“**海象运算符**”的 := 语法是在 Python 3.8 版本中发布的。它在表达式的某个元素中为变量选择值。
  • == 运算符在 Python 中通过值进行比较。Python 的 is 运算符可用于比较对象标识,并且可以限制比较。
  • Python 使用 and、not 和 or 作为布尔运算符。
  • Python 包括一种称为列表推导式的表达式类型,以及一种更基本的称为生成器表达式的表达式。
  • 使用 lambda 表达式可以操作匿名函数。
  • 条件表达式指定为 **'x if c else y'**。
  • Python 区分元组和列表。列表是可变的,指定为 [1, 2, 3],不能用作字典键。元组是不可变的,指定为 (1, 2, 3),并且可以作为字典键,前提是元组的每个元素都是不可变的。
  • Python 提供序列解包,其中两个或多个表达式,都检查可以赋值的内容,以相同的方式关联。

方法

在对象上,方法是附加到对象类的函数,**instance.method(argument)** 语法是 **Class.method(instance, argument)** 语法的语法糖,用于普通函数和方法。Python 方法包含一个显式 self 参数,用于使用实例数据,而不是其他一些面向对象编程语言(如 Ruby、Objective-C、Java、C++ 等)中的隐式 self。

此外,Python 提供了方法,通常称为 dunder 方法,允许用户定义的类更改它们如何被本机任务管理,例如比较、长度、类型转换和算术运算。

类型

Python 包括类型对象(也包括无类型变量名)并使用鸭子类型。类型约束不是在编译时评估的;相反,操作可能会在对象上失败,表明它不是兼容类型的。Python 语言是强类型的,会阻止操作,而不是默默地尝试使其有意义,即使它是动态类型的。

Python 允许程序员使用类指定自己的类型,最常用于面向对象编程。通过调用类来创建新的类实例,类是元类类型的实例,允许进行反射和元编程。

  • 在 3.0 版本之前,Python 有两种类:新式类和旧式类;当前版本的 Python 只支持新式类。
  • Python 支持渐进式类型。
  • Python 的语法允许定义静态类型。但是,在 CPython 默认实现中不评估它们。
  • mypy,一个可选的实验性静态类型检查器,支持编译时的类型检查。

算术运算

  • 对于算术运算,Python 包括基本符号(/、*、+、-)、% 模运算和 // 地板除运算符。对于指数运算,它有一个 ** 运算符和一个 @ 矩阵乘法运算符。
  • 这些运算符的实现与普通数学类似,并具有相似的优先级规则。
  • Python 提供 round 函数来将浮点数四舍五入到最接近的整数。
  • Python 3 使用“round half to even”:round(2.5) 和 round(1.5) 都生成 2 用于打破平局。在 3 之前,版本使用“round half away from zero”:round(-0.5) 生成 -1.0,round(0.5) 生成 1.0。
  • Python 允许布尔表达式具有两个或多个相等关系,方式与一般数学用法兼容。
  • Python 对所有整数运算使用任意精度算术。在 decimal 模块中,Decimal 类/类型为许多舍入模式和预定义的任意精度提供了十进制浮点数。在 fractions 模块中,Fraction 类为有理数提供了任意精度。
  • 由于第三方 NumPy 库和 Python 的大型数学库,它们进一步增强了本机功能,它经常被用作科学脚本语言来帮助处理数值数据处理和操作等问题。

Python 库

Python 广泛的标准库提供了与多种操作兼容的工具,通常被认为是其最大的优势。它支持多种标准协议和格式,包括用于 Internet 面向软件的 HTTP 和 MIME。它包含用于创建 GUI、连接单元测试、使用正则表达式、进行任意精度十进制算术、生成伪随机数以及关系数据库的模块。

标准库的几个组件包含在规范中,例如 WSGI (Web Server Gateway Interface) 实现 wsgiref 遵循 PEP 333。但是,几乎所有组件都通过其代码、测试套件和内部文档进行描述。但是,由于几乎所有标准库都是跨平台的 Python 代码,只有少数模块需要为不同的实现进行重写或修改。

Python 官方第三方软件存储库 PyPI (Python Package Index) 截至 2022 年 11 月 14 日包含 415,000 多个软件包,功能种类繁多,包括

  • 网络抓取
  • Web 框架
  • 文本处理
  • 测试框架
  • 系统管理
  • 科学计算
  • 计算机网络
  • 多媒体
  • 移动应用
  • 机器学习
  • 图像处理
  • 图形用户界面
  • 文档
  • 数据库
  • 数据分析
  • 自动化

Python 的开发环境

几乎所有 Python 实现(如 CPython)都包含一个 REPL(读取-求值-打印循环),允许它们充当命令行解释器,客户端可以顺序输入语句并立即获得结果。此外,Python 提供了一个名为 IDLE 的 IDE(集成开发环境),它更适合初学者。其他 Shell,如 IPython 和 IDLE,具有其他功能,包括语法高亮、会话状态保留和改进的自动完成。

标准桌面 IDE 和多个基于 Web 浏览器的 IDE 均可用,包括 SageMath(用于开发数学和科学相关程序);PythonAnywhere(一个托管环境和基于浏览器的 IDE);Canopy IDE(一个专注于科学计算的商业 IDE)。

Python 的实现

  • 参考实现

Python 的参考实现是 CPython。它用 C 语言编写,符合 C89 标准,并具有 C99 的许多选定特性。CPython 包含其 C 扩展,尽管第三方扩展不限于之前的 C 版本;例如,它们可以与 C++ 或 C11 一起运行。它将 Python 程序编译为中间字节码。然后,由其虚拟机 (VM) 运行。

CPython 与包含 C 语言和本机 Python 混合编写的庞大标准库一起共享,并可用于多种平台,如 Windows 和最新的类 Unix 系统,如 macOS,以及对 VMS 的非官方支持。最早的优先事项之一是平台可移植性。

  • 其他实现
    • **Stackless Python** 是一个重要的 CPython 分支,它运行微线程。它不以类似的方式使用调用堆栈,因此允许大规模并发程序。此外,PyPy 也包含一个无堆栈版本。
    • **PyPy** 是 Python 3.8 和 2.7 版本的兼容且快速的解释器。通常,它的即时编译器在 CPython 之上带来了重要的速度改进,但一些用 C 语言编写的库无法与其一起使用。
    • Python 是 Python 运行时的一个替代方案,它使用即时编译来提高 Python 程序的执行速度。
    • **CircuitPython** 和 **MicroPython** 是 Python 3 的替代方案,用于微控制器,如乐高 Mindstorms EV3。
    • **Cinder** 是 CPython 3.8 版本的一个面向性能的分支,它包含多项优化,如实验性字节码编译器、一次一个方法的 JIT、急切的协程评估和字节码内联缓存。
  • 不再支持的实现
    • Python 的许多即时编译器都得到了改进,但现在已不再支持
    • 2009 年,Google 启动了一个名为 Unladen Swallow 的项目,目标是使用 LLVM 将 Python 解释器提速五倍。
    • **Psyco** 是一个已暂停的即时专用编译器,它与 CPython 集成,并在运行时将字节码转换为机器码。Psyco 不支持 Python 2.7 或更高版本。
    • 2005 年,**PyS60** 是诺基亚发布的一个适用于 Series 60 手机的 Python 2 解释器。它实现了许多标准库模块以及一些用于与 Symbian OS 集成的模块。
  • 其他语言的交叉编译器
    许多高级对象语言都有编译器,包括受限的 Python 子集、不受限的 Python,或一种类似于 Python 的语言作为源语言。
    • **Pyjs、Transcrypt** 和 **Brython** 将 Python 编译为 JavaScript。
    • **Nuitka** 将 Python 编译为 C。
    • **CPython** 将 Python 编译为 C。
    • **Numba** 使用 LLVM 将 Python 子集编译为机器码。
    • **RPython** 编译为 C,并用于创建 Python PyPy 解释器。
    • **Pythron** 将 Python 3 子集编译为 C++。
  • 性能

2013 年 EuroSciPy 提供了关于非数值工作负载的多种 Python 实现性能比较。Python 相对于其他语言的性能通过 Computer Language Benchmark Game 进行基准测试。

Python 的开发

Python 的开发主要通过 PEP(Python Enhancement Proposal)流程进行,这是提出更大新特性、记录 Python 设计决策和收集社区对问题的意见的主要机制。Python 的编码风格在 PEP 8 中进行了描述。PEPs 由指导委员会和 Python 社区进行审查和评论。

语言的增强与 CPython 参考实现的改进有关。python-dev 邮件列表是语言开发的主要论坛。最初,特定问题被考虑在基金会引入的 Roundup 大型跟踪器中。2017 年 1 月,直到 Python 迁移到 GitHub,所有讨论和问题于 2022 年迁移到 GitHub。最初,开发是在一个执行 Mercurial 的源代码存储库上进行的。

Python 的公开版本提供三种类型,通过版本号的哪个部分被添加来区分

  • **向后不兼容的发布**,代码预计会中断并需要手动移植。版本号的第一部分被添加。这些版本频繁发生——3.0 版本是在 2.0 版本发布八年后发布的。
  • **功能或主要发布**,与旧版本基本兼容但宣布了新特性。版本号的第二部分被添加。从 3.9 Python 版本开始,这些版本预计将手动发生。
  • **错误修复发布**,不宣布新特性,大约每三个月出现一次,并且在自上次发布以来修复了足够多的错误时生成。此外,安全漏洞也会在这些版本中修补。版本号的第三个也是最后一个部分被添加。

此外,还发布了多个 beta 版、alpha 版和 release-candidate 版作为预览版并进行测试。通常,如果代码未准备好,它们会被推迟,尽管所有版本都有大致时间表。Python 开发团队在开发过程中通过执行广泛的单元测试套件来检查代码状态。PyCon 是最大的 Python 学术会议。此外,还有独特的 Python 监控功能,例如 Pyladies。

Python 的用途

对于 Web 应用程序,Python 作为脚本语言,例如通过 mod_wsgi 用于 Apache Web 服务器。已通过 Web 服务器网关接口 (WSGI) 派生了一个标准 API 来提供这些应用程序。Web 框架,包括 Zope、Bottle、Flask、Tornado、web2py、TurboGears、Pyramid、Pylons 和 Django,支持开发人员创建和维护复杂的应用程序。IronPython 和 Pyjs 可用于改进 Ajax 类应用程序的客户端。

  • **SQLAlchemy** 可用作关系数据库的数据映射器。一个名为 Twisted 的框架用于构建系统之间的通信,并由 Dropbox 使用。
  • 许多库,包括 Matplotlib、SciPy 和 NumPy,在科学计算中有效地使用 Python,以及专门的库,包括 Astropy 和 Biopython,提供特定领域的函数。
  • 一个使用笔记本界面的计算机代数系统,即 **SageMath**,是可编程的;SageMath 的库涵盖了许多数学方面,如微积分、数论、数值数学、组合学和代数。
  • OpenCV 包含 Python 绑定,具有一套用于图像处理和计算机视觉的特性。
  • Python 通常用于机器学习和人工智能项目,使用 scikit-learn、Pytorch、Keras 和 TensorFlow 等库。
  • Python 通常用作自然语言处理的脚本语言,采用模块化架构、丰富的文本处理工具和简单的语法。
  • 此外,Python 还可以使用 Tkinter 等库来创建 GUI(图形用户界面)。
  • 此外,Python 还可以使用 Pygame 等库来制作游戏,这些库可以创建 2D 游戏。
  • Python 已成功嵌入到各种软件产品中作为脚本语言,例如有限元方法软件 Abaqus、3D 动画包 Softimage、MotionBuilder、modo、Maya、Houdini、Lightwave、Cinema 4D、Blender 和 3ds Max、3D 参数建模器、2D 图像程序 Paint Shop Pro、Inkscape 和 GIMP,以及音乐记谱法程序 capella 和 scorewriter。

受 Python 影响的语言

Python 的设计和哲学影响了多种编程语言。

  • **Cobra** 使用相同的语法和缩进,并且在其文档“致谢”中首先将 Python 列为影响它的语言。
  • **Boo** 使用相同的语法、对象模型和缩进。
  • **CoffeeScript** 包含 Python 风格的语法。
  • **JavaScript/ECMAScript** 从 Python 借鉴了生成器和迭代器。
  • **Go** 是为 Python 等动态语言的工作速度而设计的,并且与切片数组具有相似的语法。
  • **GDScript** 是一种类似于 Python 的脚本语言,预装在 Godot 游戏引擎中。
  • **Groovy** 的灵感来自于将 Python 的设计理念带到 Java 的愿望。
  • 目前,**Mojo** 是一个非严格的 Python 超集,并且在某些代码中比 Python 快 35,000 倍,这得益于静态类型。
  • **Julia** 被开发为可用于通用编程,如同 Python 一样。
  • **Nim** 使用相同的语法和缩进。
  • **Swift** 是 Apple 设计的一门编程语言,包含一些受 Python 启发的语法。

此外,Python 的开发实践也被其他语言借鉴。例如,需要一份定义修改语言理由的文档的做法也用于 Swift、Erlang 和 Tcl。

Python 安装

1) **更新 APT 存储库**

2) **安装 Python**

2) **验证 Python**

当我们键入 **python** 时,它会显示默认安装的 Python,即 2.7。


Software Python 1

对于 Python3,键入以下命令,它将显示其他版本。


Software Python 2

好的,根据这些命令,我们可以测试两个 Python 版本的应用程序。