Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


引子

若干年前,我入坑 Python ,一窍不通的我偷懒选择了一个开袋即食的开发环境 Winpython,它免费开源、绿色免安装、预装了很多常用包(Packages),下载、解压缩后就可以使用了,对小白十分友好。但是这个开发环境存在一些问题:它侧重于科学统计和计算,所使用的集成开发环境(Integrated Development Environment,IDE)Spyder 略显臃肿,开启速度较慢。更重要的是,我正在开发的一个 Python 项目需要使用一个名叫「pyinstaller」的包来将程序打包成 exe 程序,使用 Winpython 操作总是失败。

近日,我鼓起勇气从头开始正儿八经地配置一个更轻量、更趁手的 Python 开发环境。经过一番折腾,我比较顺利地在 Windows 10 上配置了一个比较满意的 Python 环境:

  • 安装稳定版本的 Python 3.7
  • 使用微软出品的 VS Code 作为 IDE
  • 使用 venv 模块为不同 Python 项目搭建相互隔离的运行环境
  • 使用 Git 对 Python 项目进行版本管理

本文就用大白话来介绍我的配置过程,对其中涉及的专业术语和操作加以解释,供自己日后复习查看,也希望能为准备尝试 Python 的新手朋友提供参考。

欢迎闲来无事的大小朋友们一起来玩 Python!

注:本文的操作在 Windows 10 上进行,但配置思路和所用软件均适用于 MacOS 。

安装 Python

在电脑上配置 Python 开发环境,第一件事当然是安装 Python 。安装 Python 就像安装一个其他软件一样:到 Python 官网上下载安装程序,然后安装到电脑上。

Python 官网,我们选择「Downloads——Windows」(根据你电脑的操作系统来选择),就可以来到供 Windows 操作系统使用的 Python 的下载页面。

▲ Python 官网
▲ 在 Python 下载页面,每个版本都有对应的下载链接。

在这个页面,我们可以看到诸多的 Python 版本可供下载。这个时候,我们就迎来了一个关键的选择:选择哪个版本的 Python ?

Python 目前有两个大版本:Python 2 和 Python 3。Python 2 目前已经不再更新,最后一个版本是 Python 2.7.18;Python 3 是相较于 Python 2 有较大升级,不向下兼容,目前仍在持续更新中,最新版本是 Python 3.9.6。

「 Python 2 逐渐被淘汰,Python 3 当道」相信会是大势所趋。因此,如果没有特殊需求(比如你的项目需要用到的包不支持 Python 3 ),我们就选择安装 Python 3 了。

至于选择 Python 3 的哪个小版本,我的建议是选稳定的版本,而非最新的版本,以避免出现某些包还不支持最新版本 Python 导致的疑难杂症。我近日就有过一次血泪教训:我安装了最新的 Python 3.9.6,而在使用 pyinstaller 包将代码打包成 exe 程序的过程中总是出现缺失某个 dll 文件的警告,生成的 exe 程序到了别的电脑也无法正常运行。在苦苦折腾了一下午无果后,我卸载了 Python 3.9.6,安装了 Python 3.7.11,重新操作,一发就成功了。

以上就是我对选择 Python 版本的一些个人建议。决定好使用哪个版本的 Python 之后,我们在下载页面找到心仪版本,根据自己电脑是 32 位或 64 位下载相应的 Windows installer 或者 Windows executable installer 文件到电脑即可。

下载完成后,我们双击 exe 文件开始安装。安装时,我们可以选择「Install Now」来使用默认设置直接安装,也可以选择「Customize installation」来自定义安装目录和内容。请务必勾选「Add Python 3.7 to PATH」,也就是将 Python 添加至系统环境变量。这是一个很有用的操作,稍后会做详细介绍。

安装完成后,我们的电脑就可以「运行」Python 程序了。打开 Python 安装目录下的「python.exe」,在弹出的 Python 命令行窗口中输入print("Hello World")并按回车,我们就简单而仪式感拉满地运行了第一段 Python 代码啦。

▲ 第一段 Python 代码

当然了,我们不需要打开 python.exe 就可以运行 Python 程序。打开一个 Windows 终端,如 cmd 命令提示符窗口1,输入python并按回车,窗口就会返回电脑上安装的 Python 版本信息,这时候我们已经进入Python,接着输入print("Hello World")并按回车,就运行这段代码了。

▲ 从 Windows 终端进入 Python 并执行 Python 代码

我们也可以在 Windows 终端中使用指令python Path\CodeName.py来直接运行某一个后缀为「.py」的 Python 程序(或称为「脚本」)。

▲ 从 Windows 终端运行一个命名为「myPyCode.py」的 Python 程序

这要归功于我们在安装时「将 Python 添加至系统环境变量」的操作。「环境变量」的意义是:当我们要求系统运行一个程序而没有提供程序的完整路径时,系统除了在当前目录下面寻找此程序外,还会到「环境变量——Path」中指定的路径去寻找2。我们将 Python 添加到系统环境变量,就可以让系统更快捷地找到并运行 Python,它的作用包括:

  1. 在终端中运行 Python 程序
  2. 使用 pip 安装或者离线安装 Python 包时找到 Python 的版本和路径
  3. 让某些 IDE 找到并调用 Python

因此,「将 Python 添加至系统环境变量」可以说是一个必要操作。如果安装时忘记勾选了也没有关系,我们稍费些功夫 手动添加 即可。

到目前为止,我们的电脑已经搭建起了简单的 Python 开发环境。但是它还很简陋,下一步我们利用各种工具就来让它变得更加好用。

使用 VS Code 开发 Python

上文多次提到 IDE,它的全称是「Integrated Development Environment」,中文称为「集成开发环境」,它是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器等,具有图形化用户界面3。用大白话讲,IDE 就是一个让我们方便地写 Python 代码并运行和调试代码的软件。

目前用于开发 Python 的 IDE 有很多,我使用的是微软出品的 Visual Studio Code(简称 VS Code)。它功能和运行速度兼备,用起来十分舒服。

我们首先需要到 Visual Studio Code 网站 下载安装包并安装。

安装完成后运行 VS Code,这时候界面为英文。我们可以点击左侧边栏的 Extensions(拓展),搜索「Chinese」,就可以找到简体中文语言包拓展,点击「install」安装成功后重启软件,VS Code 现在就是中文界面了。

▲ 为 VS Code 安装简体中文语言包拓展

接下来,我们还需要在 VS Code 安装「Python」拓展,它才能运行和调试 Python 程序。搜索和安装「Python」拓展时请认准 Microsoft 出品的那个。

▲ 为 VS Code 安装「Python」拓展

安装完成后,我们点击「文件——新建文件」,VS Code 就会新建一个代码编辑窗口。点击第一行的「选择语言」,搜索并选择「Python」。由于是首次使用,此时 VS Code 会开始激活和加载「Python」拓展,完成后,左下角状态栏会显示我们电脑上所安装的 Python 版本3.7.9,这说明 VS Code 已经找到了我们所安装的 Python,并且会用它作为解释器来运行和调试 Python 程序。

我们在窗口中输入一些 Python 代码,由于安装了「Python」拓展,我们在输入代码时已经可以享受到代码着色、补全和智能提示等令人愉悦的功能了。

▲输入代码时的代码着色、补全和智能提示功能

代码编辑完成后,保存并点击右上角绿色三角形来运行。可以看到,VS Code 在编辑器下方打开了一个终端,并运行了我们的 Python 程序。

从终端所提供的信息,我们可以很清晰地看出在 VS Code 编辑和运行 Python 程序的逻辑:VS Code 提供编辑器让我们编辑代码;运行时,VS Code 找到并调用了我们安装在电脑上的 python.exe 作为解释器来运行我们的代码,并在终端中将运行结果打印出来。

现在,我们的 Python 开发环境开始好了起来,我们已经可以比较舒服地编辑 Python 代码、开发 Python 项目了。接下来,我们再来添加一些进阶的功能。

使用 venv 模块搭建虚拟环境

目前,我们电脑上安装了一个 Python,我们安装的所有包都会被安装到同一个目录下,供 Python 使用。来看看以下两个场景:

  • 场景一:我们同时在开发两个 Python 项目,项目一需要用到包 A 的 2.7 版本,项目二需要用到包 A 的 2.8 版本,这时候两个项目就会冲突了。
  • 场景二:我们开发了一个 Python 项目,并顺利完成调试。若干年后,我们的 Python 开发环境发生了变化(安装了某些与项目所用的包冲突的包、项目所用的包被删或更新等等),这时候我们的项目程序可能已经无法运行了。

「虚拟环境」就可以解决以上痛点。它为我们每一个 Python 项目创建一个隔离的开发环境,每个开发环境所安装的包和依赖相互独立,可以确保项目的开发环境不相互干扰和污染。

▲在各自的虚拟环境中开发多个 Python 项目

一些第三方包如 virtualenvpipenv 等都可以用来创建虚拟环境,而 Python 从 3.3 版本之后,自带了可以用于创建虚拟环境的 venv 模块,十分方便。我们就以 venv 模块为例,来展示 Python 虚拟环境的用法。

假设我们正在开发的项目文件位于「D:\myProject」目录下,我们来为这个项目创建一个虚拟环境。在 windows 终端中执行以下指令,就可以在「D:\myProject\virtualEnvironment」目录下创建一个空的虚拟环境:

python -m venv D:\myProject\virtualEnvironment

指令执行完成后,可以看到在「myProject」目录下新建了一个目录「virtualEnvironment」,里面就包含了一套独立的 Python 开发环境,包括 Python 解释器、第三方包等。

▲成功创建一个虚拟环境,「virtualEnvironment」目录里包含了虚拟环境的文件。

想要进入这个虚拟环境,我们需要在根据所使用的终端类型,运行「.\virtualEnvironment\Scripts」中的「activate.bat」或「activate.ps1」文件。运行文件的方法很简单,在终端中输入文件的完整路径后按回车即可:

#如果使用的终端是 cmd 命令提示符,需要运行「activate.bat」文件
D:\myProject\virtualEnvironment\Scripts\activate.bat

#如果使用的终端是 Windows PowerShell,需要运行「activate.ps1」文件
D:\myProject\virtualEnvironment\Scripts\activate.ps1

这里有一个坑需要留意。当我们在 Windows PowerShell 终端中运行「activate.ps1」文件时,终端会报错:「在此系统上禁止运行脚本」。这是由于 PowerShell 的执行策略默认为「禁止执行脚本」所致。解决的办法是:以管理员身份运行 Windows PowerShell,在运行「activate.ps1」文件前,先执行以下指令来将执行策略设置为「RemoteSigned」,就可以运行本机上的脚本了:

set-executionpolicy RemoteSigned

运行「activate」文件后,现在终端的提示符前会出现(virtualEnvironment)的标识,说明我们现在已经进入所创建的虚拟环境中了。

▲ 从 cmd 进入虚拟环境
▲ 从 Windows PowerShell 进入虚拟环境

此时,我们在这个终端里运行 Python 程序、安装第三方包,都会在这个虚拟环境中进行,不会受电脑上原有的 Python 开发环境影响。我们可以使用 pip list 指令将开发环境中安装的所有包的列表打印出来,可以看到,本机原生开发环境和虚拟环境中的包是相互独立的。

▲左:本机原生 Python 开发环境所安装的包;右:虚拟环境内所安装的包。

在终端中,想要退出虚拟环境,我们只需要输入deactivate并回车即可。

在 VS Code 使用虚拟环境的方法相同,我们在 VS Code 打开一个终端,同样运行「activate」文件,随后 VS Code 就会在虚拟环境中运行 Python 程序了。

▲在 VS Code 中进入虚拟环境

这里又有一个坑需要注意。举个例子,我在 VS Code 中进入到虚拟环境,在虚拟环境中成功安装了 numpy 包,然后运行一个 Python 程序。此时终端退出了虚拟环境,并报错:找不到 numpy 这个包。这是由于 VS Code 仍采用虚拟环境外的 Python 解释器所导致的。解决的办法是:点击 VS Code 左下角的 Python 版本号,在弹出的「选择解释器」弹窗中选择虚拟环境中的 python 解释器(位于「.\virtualEnvironment\Scripts」目录下)即可。

▲ 将 VS Code 的 Python 解释器切换为虚拟环境中的 Python
▲ 切换到虚拟环境中的 Python 解释器后,VS Code 成功在虚拟环境中运行了 Python 程序

使用「虚拟环境」来管理我们的 Python 项目是一个非常科学的编程思想,可以让我们的 Python 开发环境变得很有条理,使用起来也是十分方便的。Python 的「虚拟环境」还有很多进阶的玩法,比如多 Python 版本并存、管理和快速切换虚拟环境等等,大家可以深入探索。

使用 Git 进行项目版本管理

在上文,我们采用「虚拟环境」来管理我们不同的 Python 项目,现在,我们来对每一个 Python 项目进行版本管理,让项目的程序文件可以被妥善、便捷地备份和恢复。所用到的工具是 Git。

▲ 使用 Git 备份和恢复 Python 项目

大名鼎鼎的 Git 是创建了 Linux 的 Linus 大神的作品,它是一个功能强大的分布式版本控制系统,可以实现代码版本回退、远程仓库、多人协作等功能。Git 的用法和功能很多,关于 Git 的详细操作,推荐大家参考 廖雪峰的 Git 教程。在这里,我仅抛砖引玉地介绍 Git 的安装和基础功能4

安装 Git

使用 Git,要先安装 Git。在 Linux 或 MacOS 上的安装方法请看 这里。在 Windows 上,我们到 Git 网站下载 安装程序并安装即可,安装目录可根据自己的喜好来,安装过程中有很多设置选项,作为新手,我们无脑下一步即可。 安装完成之后,我们在安装目录或者开始菜单中找到「Git Bash.exe」,双击打开,看到一个命令行窗口,说明 Git 已经安装成功。

▲ Git Bash 命令行窗口

接着,我们在这个命令行窗口中输入以下指令来向 Git 声明我们的名字和 Email 地址:

$ git config --global user.name "User Name"
$ git config --global user.email "email@example.com"

现在,我们电脑上的 Git 已经准备就绪,我们可以用它来对我们的 Python 项目进行版本管理了。使用 Git 进行版本管理的流程是十分清晰的:

  1. 创建 Git 版本库
  2. 在开发过程中随时向 Git 版本库提交程序文件
  3. 必要时从 Git 版本库恢复代码文件

创建 Git 版本库

首先,我们需要为我们的项目创建一个 Git 版本库(Repository)。仍以 myProject 这个项目为例,打开一个 Windows 终端,如 Powershell,执行 cd D:\myProject指令进入到项目目录「D:\myProject」,然后执行 git init指令。执行后,命令行窗口会提示创建了一个空的 Git 版本库,在「myProject」目录下可以看到一个新建的隐藏目录「.git」,目录里包含了版本库的所需文件。一个空的 Git 版本库就轻松创建完成。

▲成功创建一个空的版本库,「.git」目录里包含了版本库的所需文件。

提交文件到 Git 版本库

我们的「D:\myProject」项目目录下有两个Python程序文件 myCode1.py 和 myCode2.py。现在,我们来将它们提交到 Git 版本库中,让 Git 来记录和管理它们的内容变动。这需要两步操作:

  • 第一步:在项目目录下执行git add myCode1.py指令来添加文件到版本库,其中myCode1.py为完整的文件名。我执行了两次git add指令来添加两个文件。
  • 第二步:执行git commit -m "add 2 files."指令来完成本次提交,其中"add 2 files."是对本次提交的注释,注意不要漏掉引号。

执行完成后,命令行窗口就会返回本次提交的文件改动数量和改动内容等信息。像下图,我们就成功向 Git 版本库提交了 myCode1.py 和 myCode2.py 两个文件。

▲ 将 myCode1.py 和 myCode2.py 提交到 Git 版本库

现在,我们可以执行一个指令git status来查看版本库的状态:

Git status指令提示除了虚拟环境文件夹外,没有其他文件准备提交到版本库

从 Git 返回的信息来看,我们的虚拟环境文件夹没有提交到版本库,除此之外,我们的项目目录里没有准备提交的文件。

那么,现在我们来继续编辑我们的 Python 程序文件。myCode1.py 文件的代码内容如下,我们将最后一行代码print(''Hello World!\n'')注释掉,并添加一行代码print(''Hello Git!\n''),然后保存:

import numpy

print ("\nThis is a Python Program\n")
for i in numpy.arange(4):
    print (i)
# print ('Hello World!\n')
print ('Hello Git!\n')

现在,在 Windows 终端里再次执行 git status 指令看看结果:

Git status指令提示 myCode1.py 文件被修改了,修改内容未提交到版本库

可以看到,Git 提示我们,myCode1.py 文件在上一次提交到版本库之后被修改过了,修改内容还没有被提交到版本库。那么myCode1.py 具体被改动了什么呢?我们可以执行另一条指令 git diff myCode1.py 来查看:

Git diff指令提示 myCode1.py 文件详细的修改内容

可以看到,Git 可以不仅可以发现程序文件发生了修改,还可以知道具体的修改内容。事实上,Git 可以追踪各种文本文件的改动内容,包括txt文件、网页和各种程序代码等。而对于图片、视频、Microsoft Word 文件等二进制文件,Git 只能发现文件发生改动,但无法追踪具体的改动内容5

现在,我们就把修改后的 myCode1.py 再次提交给版本库吧。同样,执行 git add myCode1.py指令来添加,但在执行提交指令 git commit 之前,先git status一下看看此时的状态:

Git status指令提示 myCode1.py 文件准备提交到版本库

Git 提示我们:修改后的 myCode1.py 准备被提交到版本库。现在,我们就执行 git commit -m "modify the Hello info in myCode1"来完成提交。

以上就是我们在项目开发过程中不断向 Git 版本库提交程序文件的一个缩影。在这个过程中,我们可以随时用git statusgit diff filename来查看版本管理的状态。

当我们向 Git 版本库提交了很多次文件之后,我们可以执行git log指令来查看提交日志:

▲ 提交日志从最近到最远显示提交人员、日期和提交的注释

可以看到,提交日志忠诚地记录了我们项目的程序文件的每一次提交,提交日期和注释可以帮助我们记忆每次提交时的修改内容。这相当于我们的项目被妥善地「存盘」了。

从 Git 版本库恢复文件

版本管理的一个重要作用在于:我们把程序文件搞砸了之后,可以把文件恢复到某个历史版本,也就是「版本回退」。我们从 Git 版本库恢复上一版本文件的指令是git reset --hard HEAD^,其中,HEAD表示版本库最后一次提交的版本,而上一个版本是HEAD^,再上一个版本就是HEAD^^,往上100个版本可以写成HEAD~100

比如说,我执行了指令git reset --hard HEAD^^,得到了以下结果:

▲ 执行了回退到上上个版本的指令后,Git 提示文件回到了「add 2 files」那个版本

打开两个程序文件看看,它们的确恢复到了「add 2 files」那一次提交时的状态的。

就这样,我们顺利地开始利用 Git 来对我们的项目进行版本管理了。不过,以上内容只是 Git 皮毛中的皮毛,更多的内容需要大家自行深入学习。

我们所使用的 VS Code 也为 Git 提供了 VIP 级别的可视化支持。我们电脑安装了 Git 之后,打开 VS Code ,点开左侧工具栏的「源代码管理」,就可以可视化地使用 Git 功能了。我们可以打开本地目录或者克隆版本库;如果打开的目录还没有 Git 版本库,VS Code 会提示我们进行初始化来新建 Git 版本库或者将文件夹发布到 GitHub;在一个配置了 Git 版本库的目录里,我们可以进行提交、推送、克隆等 Git 操作,相比于命令行指令,操作又更方便了一些啦。此外,我们还可以在 VS Code中安装「Git」拓展来实现更完整的 Git 功能。

关于 VS Code 中的 Git 用法,推荐大家参考 使用 VS Code 进行 Git 可视化操作

▲ 在 VS Code 中的「源代码管理」中使用 Git
▲ 打开一个不包含版本库的目录时,VS Code 发出相关提示
▲ 在VS Code 中进行可视化 Git 操作

现在,我们的项目目录里有「virtualEnvironment」目录和「.git」目录,它们是我们管理 Python 项目的两个利器:虚拟环境和 Git 。有两个利器在手,我们的 Python 项目开发环境就非常清晰和舒服了。

尾声

看到这里,大家辛苦了。以上就是我在电脑上搭建 Python 开发环境的讲解。本人才疏学浅,在 Python 开发上只是一名半路出家的门外汉,文中(尤其是虚拟环境和 Git 的使用部分)的不足和错误在所难免,请大牛轻喷,欢迎评论交流。

> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃

> 想申请成为少数派作者?冲!