logo
登录 / 注册

python编程系列教程:7-python解释器的安装

头像
程亮
2022-02-13 · 运维工程师

经过linux教程的4节学习,我们掌握了一些linux系统的基础操作,这些足够我们去开展python解释器的安装了。

但是,该如何展开呢?一定要谨记的一个原则是,在开源项目中做什么事情一定要去找官方文档,一个流行的开源软件,其文档是十分齐全的,这是它流行起来的基础。不同于其它教程,这里并不会直接告诉你如何编译安装python解释器,而是告诉你去找安装它的方法。泡面的包装袋都有如何泡面的说明,那python解释器如何去安装,官方有没有说明呢?我们去官方文档找一找。


还记得python的官方网站吗?进入www.python.org,找到这个位置点击进去就是python的文档了。

其实你也可以记住docs.python.org这个网址,直接进入这个网站,就是python的官网文档页面了。

点击Python Setup and Usage:

我们即将安装的平台是linux系统,所以我们点击Using Python on Unix platforms。

linux和unix是不同的系统,它们非常相像,linux是免费开源的,而unix是收费的。

大部分linux发行版都预置了python,而我们安装好的rocky linux同样如此,你可以在命令行中试一下如下代码:

python -V
# V大写,version的意思

rocky linux预置的python版本是3.6.8的,因此我们想要最新版本的python只能自己编译安装了,我们点击左侧的Building Python来看看自行编译安装python要如何做:

这里告诉我们想要编译python,需要去下载源码,因此,我们先点击source去下载源码。

这里我们选择最新的python3版本,python2已经停止开发维护了。

将页面滑到最下面,我们就可以看到下载链接了。

这里我们看到了源码、mac、windows三种平台的发行包,这里我们选择source release的包。现在我们需要把它下载到linux系统里,准备开始编译安装。

鼠标右键点击"XZ compressed source tarball", 选择复制链接。

回到我们的linux虚拟机中,cd到Downloads目录下,使用wget命令下载python的源码包(把刚刚复制的链接粘贴到wget命令之后):

按下回车键之后就可以等待它下载了。

下载完成之后,使用"ls -l"检查我们下载到的python源码包:

源码包下载好之后,就可以开始安装了,看看官方文档怎么说?

注意页面红框标注的地方,第一个是python编译安装的方法,第二个是python安装时要注意的事项,我们一个一个来解读。


前面我们提到程序经历了机器语言-汇编语言-高级语言这三个阶段,机器只认识1和0的机器语言,而人类难以理解这种语言,所以使用贴近人类语言的高级语言去编写程序。而编译(compile)安装就是将python源代码(人类易读的高级语言)变成机器可以识别的语言(二进制文件),这个过程就是编译。还记得的linux教程中提到过"."表示当前目录吗?./configure正是表示当前目录下的configure文件,这个文件是python源码包中的,待会需要我们解压出来后去执行这些操作。make 和 make install 就是编译安装python,configure就是做一些配置。


但是warning里警告是什么意思呢?由于系统里已经自带python3了,make install会默认安装在系统路径中,这样两个不同版本的Python会起冲突,会造成编译安装的python版本无法正常使用,因此官方文档里建议使用make altinstall代替make install来使两种不同版本的python共存。至于为什么会造成这样的情况,后续的linux系列教程会讲解,这里大家先这样理解。


因此我们将要安装编译的命令是这样的:

./configure
make
make altinstall


这里还有一个情况要注意一下,就是python的开发者设置了默认的编译安装路径,它会将python的各软件文件分散放到各种路径中,这就造成我们后期管理不便,比如我要删除掉某个版本的python,或者管理某个python版本文件。如果它们分散到各处,十分不便,因此我们在configure中配置一下编译安装路径就解决了这个问题。configure还有众多的参数调整,待熟悉python和linux,我们再次尝试理解使用它们,这次先忽略掉。


因此,我们最终的安装编译命令是这样的:

# 命名python3102是因为好方便我们辨别python版本,有时候我们需要在系统上安装不同版本的python以满足需要。
# 而/usr/local大家约定俗成的编译安装的路径,因此我们把编译安装路径设置在这里
./configure --prefix=/usr/local/python3102
make
make altinstall


好了,我们正式开始我们的编译安装工作,首先请确保你已经下载好了python源码包:

# 确认自己的路径在家目录下的下载文件夹内
pwd
# ls -l 查看下载好的源码包的详细信息
ls -l


下载的是个压缩包,因此我们需要去解压它,使用一条命令即可:

# tar在linux是一个万能的压缩解压工具,后续在linux教程中详细讲解相关命令
# tar -xf 加上压缩包就是解压该压缩包,敲一个大写P后按tab键可以自动补齐,一定要熟练使用这个技巧
tar -xf Python-3.10.2.tar.xz
# 再次查看目录内有什么东西
ls -l

图中蓝色的就是我们解压出来的文件夹,cd 进入该目录,使用 ls -l 查看该目录中有什么?

python解释器是C语言开发的,如果你翻看其中的目录,就会发现有.c结尾的文件,那个就是C语言文件。这里我们看到了configure文件,这就是编译配置所需要用到的命令,因此,我们前面总结的编译安装命令此时就可以开始使用了。

首先执行"./configure --prefix=/usr/local/python3102",配置编译后的软件要安装在我们预期的路径。

啊哦,没想到我们配置检查过程中就失败了,注意"configure: error: in..."那两行的错误提示,在计算机中,出现任何error的提示,那基本表示你要做的事情就出现严重错误了。python解释器是C语言开发的,那编译就需要C编译器,但是在我们的系统中不存在,怎么办?

遇事不决,量子力学。呃不对,我们应该找开发者,开发这个东西的人肯定知道!哪里去找?其实开发者们已经在文档里告诉我们了,那我们就去它的文档里找一找该怎么办。

这里告诉我们,在源码包里有README.rst文件描述了Configuration options相关的问题,不过这个文件读起来对我们并不友好,我们可以点击上图红色的链接,在线阅读这个文件。

你打开的链接,就是Python官方开源的地址,你可以在这里看到Python的源代码。但我们目前关不关心这个,需要将python解释器正确地安装在我们的linux系统中,你可以往下滑看到详细的Configuration的相关说明:

"Build Instructions"就是我们要找的东西,点击它查看我们需要的信息。

这里第一段内容告诉我们编译的大致过程,但我们在第一步就卡住了,而第二步则告诉我们编译python需要第三方的库,而我们刚刚执行configure出现的错误告诉我们没有找到C compiler正是它的依赖之一,而如何解决这个问题,我们按照说明点击"Install dependencies"去查看如何解决。

由于我们的系统是rocky linux,它是基于redhat进行发行的,所以我们使用红框中的命令就可以解决编译过程中的依赖问题。


这里解释一下为什么会这样:想象一下,你想自己在家蒸包子,你需要准备面料、肉、菜等材料,因此你可以直接去购买即可。准备齐全之后加工一下便可以做包子了,并不需要自己去种小麦,养家禽,种菜去筹集材料,是不是很方便。而python解释器的开发正是“做包子”一样,开发人员不需要从头到尾完全自己做,别人已经做好的功能,他可以直接拿来引用而不用自己重新做,而他引用别人的功能的包就是依赖。而Python的开发使用了很多别人做好的功能,因此编译时我们也需要把这样功能的安装包安装到系统上。那为什么不自己从头到尾做呢?就像做包子一样,我要面粉还得自己去种小麦,这太划不来了,而且别人已经开发好的成熟的功能,自己在从头做功能并不一定比现成的好,而且费时间精力。


编程世界中这样的事情很常见,比如redhat linux也是使用了开源的kernel和gnu的东西,而我们之后使用python开发自己的小工具,也会使用别人已经做好的东西,这会极大的方便我们去开发自己的东西。


好了,python解释器的configuration中的依赖问题我们总算找到答案了,因此需要在我们的系统中执行下面的命令:

# 还记得吗?yum会安装软件修改系统设置,因此我们需要使用sudo去使用这个管理员命令
sudo yum install yum-utils
# 还需要额外启用PowerTools安装仓库(repository), 这个仓库包含了大部分的开发工具,而python的编译安装正是需要这里面的软件
sudo yum config-manager --enable powertools
# 开始为python安装依赖包
sudo yum-builddep python3

# 如果以上命令长时间没有结束,你可以按住键盘左下角的ctrl+c键可以取消当前命令,然后执行以下命令清除缓存重新执行卡住的命令。
sudo yum clean all

这里我们回答"y"就可以启动安装了,后续都是回答"y"。

然后启用powertools的软件仓库:

没有任何回应说明就成功了,接下来安装Python编译安装所需要的依赖包:

同样回答"y"就可以安装了。


现在我们就可以正常执行configuration的命令了

./configure --prefix=/usr/local/python3102

此时你可以向你的朋友“炫技”,伪装一波高级程序员,没准他会赞叹你。

configuration过程没有任何报错,而且正常结束,说明你的准备工作就没有问题了,这里它提示我们加上"--enable-optimizations"的参数,可以优化编译,所以我们再次调整一下我们的configuration命令:

./configure --prefix=/usr/local/python3102 --enable-optimizations

我们重新执行一下加上"--enable-optimizations"的configuration的命令:

重新执行configuration命令后,没有任何优化提示了,因此我们可以开始编译了,直接在当前目录执行make。

# 启动编译
make

这里提示我们make命令没有找到,询问我们是否安装make这个软件包,这里我们回答y就可以了,后续都是回答y回车。

如果你看到上图中的内容,说明你正式进入编译流程了,这个过程会非常漫长,取决于你电脑性能,只需要耐心等待即可。

终于,漫长的编译结束了:

这时我们就可以将编译好的python文件安装到我们预先设置的"/usr/local/python3102"中了,"/usr/local/"是编译安装软件的惯例路径,就是编程世界的人们都这样做,甚至你如果不使用"--prefix"这个参数,python也会安装到这里来,只不过是按照某些规则分散的放到这里的目录之下,但不便于我们管理使用,所以要自己单独设置一下"--prefix=/usr/local/python3102"。

好了,使用"make altinstall"安装编译好的python吧。

make altinstall

# 为什么不是make install而是使用make altinstall呢?看下图的官方文档的解释。

看"warning"中的解释,相对于我们的情况来说,我们的系统中已经存在3.6的版本,而我们编译安装的是3.10.2的版本,因此他们会起冲突,而使用"make altinstall"会避免这种情况,至于为什么,后续我们在linux系统教程中会有讲解,这里先这样理解。

可是我们执行"make altinstall"时却发生错误退出了,显示"Permission denied"!我们之前提到过,我们当前使用的用户是普通用户,它只能在自己的home目录下及某些公共目录下“搞事情”,而/usr/local并不是公共区域,这里通常会运行着编译安装好的程序,因此普通用户并不能在这里操作。不过好在我们使用的用户在安装系统的时候,被赋予了管理员的权限,因此我们加上sudo并可以使用管理员的权限,把Python安装在这里,因此我们需要运行如下命令:

sudo make altinstall

终于我们完成了安装:

注意上图中两个红色框的内容,其它WARNING可以忽略,它们并不影响我们编译的结果,但是两个红杠中的内容需要引起我们的注意。


第一个红框提示我们"/usr/local/python3102/bin"并不在PATH中,这是什么意思呢?我们使用的cd, mv, yum等等的命令,是在系统的某个固定路径下,我们输入这些命令回车执行时,系统会在这些路径中搜索这些命令去执行,而我们编译安装好的命令并不在这些路径中,需要添加进去,这些概念我们之后会在linux教程中解释,目前先按如下命令执行:

# 向系统中添加我们编译安装好的python下的bin路径
echo "export PATH=\$PATH:/usr/local/python3102/bin" | sudo tee /etc/profile.d/python.sh
# 读取我们配置好的路径
source /etc/profile.d/python.sh

设置好之后我们可以试一下能不能执行我们编译安装好的python文件

在命令行中输入python3之后再连按两下tab键,就会显示出所有版本的python3命令。直接执行python3 -V是系统自带的python版本,而加上版本号之后就是我们编译安装好的python版本,但是这样用太麻烦了,可不可以简单点呢?


这就要提到上面第二个红框中的提示了:

由于我们安装python时使用了sudo,以管理员身份安装的,之后安装python的模块包时,会出现权限问题和冲突问题,因此它建议我们使用virtual environment来解决这个问题。因此我们可以使用如下命令创建一个虚拟的python环境以供我们之后的学习使用:

# cd到我们家目录下的文档目录中, ~表示自己的家目录,就是你登录系统后所处的位置,比如/home/lucas
cd ~/Documents/
# 使用我们编译安的python 3.10.2版本的命令,创建一个叫python3的虚拟环境
python3.10 -m venv python3
# 查看创建好的虚拟环境
ls -l

# 进入创建好的虚拟环境python3当中
cd python3
# 查看有什么内容
ls -l
# 激活这个虚拟环境
source bin/activate
# 检查虚拟环境中的python版本
python3 -V

虚拟环境中你可以直接使用python3这个命令了,它会直接调用我们安装好的Python版本,并不会和系统自带的python版本起冲突。


好了,我们的Python解释器终于安装完成了,并且完成了调试,我们以后就使用这个解释器来继续深入学习研究python。


但是,如果还像以前那样码代码,真的是太难受了。

有没有好一点的方法?程序员们一般会使用一种叫IDE(Integrated Development Environments)的东西,来进行编码,它会自动补齐代码,检查语法错误,语法特殊标记(语法高亮)等种种特性,好方便他们去开发。所以我们也来使用这种IDE来方便我们的学习研究,IDE一般由某种工具提供,这里我们先使用vscode(Visual Studio Code),它是由微软开发并开源的代码编辑器,支持多种编程语言。


使用bing或google搜索vscode,找到它的官方网站。

按下图中的标注的序号1、2选择下载rpm的linux安装包:

复制并执行官方文档中的命令,安装vscode:

在我们的系统中执行以上命令:

安装vscode:

通通回答"y"并按回车键就可以了。


安装完成后打开vscode:

启动后选择你喜欢的UI界面,然后点击Next Section:

继续点击Next Section:

点击Mark Done:

这里我们测试一下python在vscode中编辑的效果,打开一个文件夹:

选择Documents然后点击ok:

选择"yes"

然后在左侧点击新建一个文件,这里可以看到我们刚刚建立的虚拟python3环境:

将新文件命名为test.py:

此时需要我们安装python的拓展支持,点击下面的图标安装(如果这里没有显示Python,可以在上面的搜索栏中搜索Python进行安装):

安装完成后我们回到刚刚新建的test.py文件,试着输入下面的代码:

print('hello world')

自动补齐功能:

输入完成后点击右侧的运行:

看下方的运行效果:

注意一定要使用我们刚刚建立好的虚拟环境:

好了我的在IDE环境也设置好了,接下来的学习就使用这个编辑器学习之后的Python教程。


本次教程较为曲折,为什么不一步到位告诉大家如何编译安装python及设置IDE呢?编程学习十分依赖自学能力,本文提到的步骤有可能会在官方版本更新后失效,这时候再按照本文中的步骤编译安装python就会失败,所以本教程并不会上来就告诉你如何如何做,而是循循善诱,告诉你如何找到操作方法,之后掌握这种学习技巧后,学习任何编程相关的知识都可以手到擒来。


学习python的同时也需要学习linux,之后我们将开发好的python程序部署在系统中,需要懂得linux的相关知识,因此linux也需要同步学习,linux系列教程也会同步更新。


我们下次见~


python编程系列教程:7-python解释器的安装脉脉
阅读 5
声明:本文内容由脉脉用户自发贡献,部分内容可能整编自互联网,版权归原作者所有,脉脉不拥有其著作权,亦不承担相应法律责任。如果您发现有涉嫌抄袭的内容,请发邮件至maimai@taou.com,一经查实,将立刻删除涉嫌侵权内容。
相关推荐
最新发布
大家都在看
热门人脉圈
    头像
    我来说几句...
    脉脉App内打开