若干年前,我入坑 Python ,一窍不通的我偷懒选择了一个开袋即食的开发环境Winpython,它免费开源、绿色免安装、预装了很多常用包(Packages),下载、解压缩后就可以使用了,对小白十分友好。但是这个开发环境存在一些问题:它侧重于科学统计和计算,所使用的集成开发环境(Integrated Development Environment,IDE)Spyder略显臃肿,开启速度较慢。更重要的是,我正在开发的一个 Python 项目需要使用一个名叫「pyinstaller」的包来将程序打包成 exe 程序,使用 Winpython 操作总是失败。
使用 Git 对 Python 项目进行版本管理
本文就用大白话来介绍我的配置过程,对其中涉及的专业术语和操作加以解释,供自己日后复习查看,也希望能为准备尝试 Python 的新手朋友提供参考。欢迎闲来无事的大小朋友们一起来玩 Python!????注:本文的操作在 Windows 10 上进行,但配置思路和所用软件均适用于 macOS。▍安装 Python在电脑上配置 Python 开发环境,第一件事当然是安装 Python 。安装 Python 就像安装一个其他软件一样:到 Python 官网上下载安装程序,然后安装到电脑上。在https://www.python.org,我们选择「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 命令提示符窗口,输入 python 并按回车,窗口就会返回电脑上安装的 Python 版本信息,这时候我们已经进入 Python,接着输入 print(“Hello World”) 并按回车,就运行这段代码了。
▲ 从 Windows 终端进入 Python 并执行 Python 代码我们也可以在 Windows 终端中使用指令 python Path\CodeName.py 来直接运行某一个后缀为「.py」的 Python 程序(或称为「脚本」)。
▲ 从 Windows 终端运行一个命名为「myPyCode.py」的 Python 程序这要归功于我们在安装时「将 Python 添加至系统环境变量」的操作。「环境变量」的意义是:当我们要求系统运行一个程序而没有提供程序的完整路径时,系统除了在当前目录下面寻找此程序外,还会到「环境变量——Path」中指定的路径去寻找。我们将 Python 添加到系统环境变量,就可以让系统更快捷地找到并运行 Python,它的作用包括:在终端中运行 Python 程序使用 pip 安装或者离线安装 Python 包时找到 Python 的版本和路径
让某些 IDE 找到并调用 Python
▲ 为 VS Code 安装简体中文语言包拓展接下来,我们还需要在 VS Code 安装「Python」拓展,它才能运行和调试 Python 程序。搜索和安装「Python」拓展时请认准 Microsoft 出品的那个。
场景二:我们开发了一个 Python 项目,并顺利完成调试。若干年后,我们的 Python 开发环境发生了变化(安装了某些与项目所用的包冲突的包、项目所用的包被删或更新等等),这时候我们的项目程序可能已经无法运行了。
「虚拟环境」就可以解决以上痛点。它为我们每一个 Python 项目创建一个隔离的开发环境,每个开发环境所安装的包和依赖相互独立,可以确保项目的开发环境不相互干扰和污染。
▲ 在各自的虚拟环境中开发多个 Python 项目一些第三方包如virtualenv、pipenv等都可以用来创建虚拟环境,而 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 的 Python 解释器切换为虚拟环境中的 Python
▲ 切换到虚拟环境中的 Python 解释器后,VS Code 成功在虚拟环境中运行了 Python 程序使用「虚拟环境」来管理我们的 Python 项目是一个非常科学的编程思想,可以让我们的 Python 开发环境变得很有条理,使用起来也是十分方便的。Python 的「虚拟环境」还有很多进阶的玩法,比如多 Python 版本并存、管理和快速切换虚拟环境等等,大家可以深入探索。▍使用 Git 进行项目版本管理在上文,我们采用「虚拟环境」来管理我们不同的 Python 项目,现在,我们来对每一个 Python 项目进行版本管理,让项目的程序文件可以被妥善、便捷地备份和恢复。所用到的工具是 Git。
▲ 使用 Git 备份和恢复 Python 项目大名鼎鼎的 Git 是创建了 Linux 的 Linus 大神的作品,它是一个功能强大的分布式版本控制系统,可以实现代码版本回退、远程仓库、多人协作等功能。Git 的用法和功能很多,关于 Git 的详细操作,推荐大家参廖雪峰的 Git 教程(https://sspai.com/s/Oxx0)。在这里,我仅抛砖引玉地介绍 Git 的安装和基础功能。安装 Git使用 Git,要先安装 Git。在 Linux 或 MacOS 上的安装方法可以在https://sspai.com/s/7yy8 找到。在 Windows 上,我们到https://git-scm.com/downloads下载安装程序并安装即可,安装目录可根据自己的喜好来,安装过程中有很多设置选项,作为新手,我们无脑下一步即可。安装完成之后,我们在安装目录或者开始菜单中找到「Git Bash.exe」,双击打开,看到一个命令行窗口,说明 Git 已经安装成功。
必要时从 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指令提示 myCode1.py 文件被修改了,修改内容未提交到版本库可以看到,Git 提示我们,myCode1.py 文件在上一次提交到版本库之后被修改过了,修改内容还没有被提交到版本库。那么myCode1.py 具体被改动了什么呢?我们可以执行另一条指令git diff myCode1.py 来查看:
▲Git diff指令提示 myCode1.py 文件详细的修改内容可以看到,Git 可以不仅可以发现程序文件发生了修改,还可以知道具体的修改内容。事实上,Git 可以追踪各种文本文件的改动内容,包括 txt 文件、网页和各种程序代码等。而对于图片、视频、Microsoft Word 文件等二进制文件,Git 只能发现文件发生改动,但无法追踪具体的改动内容。现在,我们就把修改后的 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 status 和 git 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 用法,推荐大家参考这篇文章:https://sspai.com/s/jNN0
▲ 在 VS Code 中的「源代码管理」中使用 Git
▲ 打开一个不包含版本库的目录时,VS Code 发出相关提示
▲ 在VS Code 中进行可视化 Git 操作现在,我们的项目目录里有「virtualEnvironment」目录和「.git」目录,它们是我们管理 Python 项目的两个利器:虚拟环境和 Git 。有两个利器在手,我们的 Python 项目开发环境就非常清晰和舒服了。▍尾声看到这里,大家辛苦了。以上就是我在电脑上搭建 Python 开发环境的讲解。本人才疏学浅,在 Python 开发上只是一名半路出家的门外汉,文中(尤其是虚拟环境和 Git 的使用部分)的不足和错误在所难免,请大牛轻喷,欢迎评论交流。题图来自 Unsplash:@cdr6934/更多热门文章/