项目的需要,需要在CentOS 7.5上去部署一个Python 3.9.10的安装环境。
值得注意的是在CentOS 7.5系统中,默认安装了 Python 2.7.x。
Python 2.7.x 是许多系统工具和应用程序所依赖的版本,因此它被包括在 CentOS 7.5 发行版中。如果在 CentOS 7.5 系统上运行 python 命令,它将使用默认的 Python 2.7.x 解释器。
我们可以测试一下是不是默认安装了Python 2.7.x。
用下面这条命令去测试:
python --version
从上面的运行结果来看,CentOS 7.5是默认安装了Python 2.7.5的。
接下来的问题是,显然,在CentOS 7.5中,一些程序或软件,包括用户安装的,是需要依赖Python 2.7.x,所以对于Python 2.7.x,我们并不能将它卸载了事。
那我们怎样保证自己写的Python代码能通过Python 3的解释器来执行,而不通过.Python 2.7.x的解释器来执行呢?
常见的方法有两种:
第1种:在命令行中使用 python3 命令来运行 Python 3.x 代码。例如,假设您的 Python 3.x 代码保存在 test.py 文件中,您可以使用以下命令来运行它:
python3 test.py
第2种:在 Python 3.x 代码的第一行添加以下代码,这将确保代码在 Python 3.x 中运行:
# !/usr/bin/env python3
这里详细解释一下上面这句代码的含义:
#!/usr/bin/env python3是一个特殊的注释,也称为 Shebang 或 Hashbang。它的作用是告诉系统这个脚本应该使用哪个解释器来运行。
当在 Linux 或类 Unix 系统中运行一个脚本时,内核会查看脚本的第一行,如果它以 #! 开头,那么内核会将其余部分解释为解释器的路径,然后将脚本文件作为解释器的参数来运行脚本。
在 #!/usr/bin/env python3 中,#! 表示这是一个 Shebang 注释。/usr/bin/env 是一个可执行文件,它可以在系统的 PATH 环境变量中搜索可执行文件并执行它。python3 是要使用的解释器的名称。
注意:
/usr/bin/env 是一个可执行文件,env这个可执行文件的作用是:在 PATH 环境变量中搜索与该命令对应的可执行文件,并使用找到的第一个可执行文件来执行该命令。
当 #!/usr/bin/env python3 出现在脚本文件的第一行时,内核会解析这行代码,并使用 env 可执行文件来查找与 python3 命令对应的可执行文件的位置。由于 env 是一个可执行文件,所以它可以搜索 PATH 环境变量中的所有目录,直到找到名为 python3 的可执行文件。然后,env 将控制权传递给 python3 可执行文件,使其运行 Python 3.x 解释器,并开始解释剩余的脚本代码。
使用 env 来寻找可执行文件的好处是,可以避免在脚本中硬编码可执行文件的路径,而是通过 PATH 环境变量来查找可执行文件,这样可以增加脚本的可移植性。如果您在其他系统上运行具有相同 Shebang 行的脚本,env 将使用该系统上的正确版本的 Python 解释器来运行脚本,即使在不同系统上,Python 解释器的安装路径也可能不同。
我们可以根据自己的实际情况去选择上面两种方法。
接下来还有个问题,那就是对于我们编写的每一个Python代码,是不是都需要加上上面这句代码呢?
答案是:如果希望用Python3解释器运行,那就都加上吧。
通常我们还需要在每个Python代码文件的开头加上编码格式说明语句:
# -*- coding: utf-8 -*-
那么问题来了,这两句说明性语句的顺序应该是怎样的呢?
是
# -*- coding: utf-8 -*-
# !/usr/bin/env python3
还是:
# -*- coding: utf-8 -*-
# !/usr/bin/env python3
呢?
答案显示是应该把语句
# -*- coding: utf-8 -*-
放在第一行嘛,这是因为编码格式说明语句应该放在任何其他内容之前。Python 解释器在读取 Python 代码文件时会查找编码格式说明语句,以确定代码文件中使用的字符编码,然后才会开始解释文件的其他部分。
这两个前置性问题搞清楚后,接下来我们就可以在CentOS 7.5安装Python 3了。
在安装Python 3前,一般会用命令
sudo yum update
作用:更新您系统中已安装的软件包到最新版本。
具体来说,sudo yum update 命令会执行以下操作:
检查您系统上已安装的软件包版本和可用的最新软件包版本之间的差异。
下载可用的更新并安装它们。
询问您是否确认要安装这些更新,如果您同意,则会安装它们。
在安装过程中,如果需要,可能会要求您提供一些额外的信息。
更新软件包后,yum 命令会重新启动与这些软件包相关的服务和应用程序,以确保新版本的软件包正确地运行。
通过定期更新软件包,您可以获得最新的功能和安全修复,以提高系统的可靠性和安全性。
提问:为什么装Python 3前要去更新系统中别的已安装的软件包到最新?
答:安装Python 3之前更新已安装的软件包是一种好的做法,因为许多软件包在运行时需要一些特定版本的库和依赖项。更新系统上的软件包可以确保您的系统中安装的软件包与Python 3兼容,并可以避免可能出现的不兼容性问题。
此外,更新软件包也可以提高系统的安全性和性能。新版本的软件包通常会修复安全漏洞和其他错误,并提供了更好的性能和稳定性。如果您不更新软件包,则可能会遇到性能下降或安全漏洞等问题。
因此,在安装Python 3之前更新已安装的软件包是非常推荐的,可以确保您的系统安全、稳定和兼容。
提问:装Python 3前不更新系统中别的已安装的软件包到最新可不可以?
答:理论上,在安装Python 3之前不更新已安装的软件包也可以。但是,这可能会导致一些不兼容性问题,可能会影响您系统上的其他软件包的正常运行。
如果您不更新软件包,则可能会遇到某些软件包版本之间的依赖关系冲突,从而导致安装Python 3失败。此外,一些旧版本的软件包可能包含已知的安全漏洞,这可能会导致系统的安全性受到威胁。
因此,建议在安装Python 3之前更新系统中已安装的软件包,以确保系统的兼容性、安全性和稳定性。如果您因为某些原因无法更新软件包,则建议在安装Python 3之前仔细检查系统和软件包的兼容性,并确保您已经安装了所有必要的依赖项。
执行语句:
sudo yum update
接下来去Python官网下载Python-3.9.10的离线压缩包。
Python官网下载Python-3.9.10的离线压缩包的URL链接如下:
https://www.python.org/ftp/python/3.9.10/
下载文件名为:Python-3.9.10.tgz,这个是用来安装在Linux系统上的哈。
下载好之后利用宝塔面板上传到目录 /opt/myapp/下:
提问:为什么是目录 /opt/myapp/下呢?
在CentOS系统中,一般把自己上传的离线安装包放到 /opt 目录下比较专业和规范。
/opt 目录是专门用来存放第三方软件和应用程序的,默认情况下只有 root 用户有写入权限。将离线安装包放到 /opt 目录下可以方便管理和维护,同时也遵循了Linux系统的文件系统层次结构(Filesystem Hierarchy Standard, FHS)标准。
在 /opt 目录下,可以创建一个与应用程序名称相关的子目录,再将离线安装包解压到该目录下。例如,如果你要安装的应用程序名为 myapp,那么可以在 /opt 目录下创建一个名为 myapp 的子目录,并将离线安装包解压到该目录中。
总之,将离线安装包放到 /opt 目录下是一个比较常见的做法,也是符合标准的做法。
然后就可以按上面的步骤进行安装了。
1 进入到 Python-3.9.10.tgz 所在目录。
cd /opt/myapp/
2 解压 Python-3.9.10.tgz 文件。
tar -xzvf Python-3.9.10.tgz
3 进入到解压后的 Python-3.9.10 目录:
cd Python-3.9.10
4 配置安装选项:
./configure --prefix=/usr/local/python3.9
这里指定了 Python 的安装路径为 /usr/local/python3.9,也可以根据需要自行修改。
这条语句通过执行带参数的 ./configure 脚本,来实现配置 Python 的安装路径。具体的参数就是“prefix=/usr/local/python3.9”
5 编译并安装 Python:
make && make install
6 验证 Python 是否安装成功:
/usr/local/python3.9/bin/python3 -V
7 这里使用了刚刚安装的 Python-3.9.10 的路径,输出应该为:
Python 3.9.10
8-为Python创建软链接(类似于Windows中配置环境变量),以便在命令行中直接使用python3命令:
sudo ln -s /usr/local/python3.9/bin/python3 /usr/bin/python3
通过这个命令,可以实现在命令行中直接使用python3命令调用Python 3.9.10。
运行完上面这个软链接创建命令后,在目录/usr/bin/中会出现下面这个软链接:
因为/usr/bin/路径是系统环境变量PATH中默认存在的环境变量路径,所以完成这个步骤后,可以在命令行中输入python3 -V来验证Python是否安装成功,以及Python的版本号是否为3.9.10。
题外话:如果软链接的路径搞错了,想删除掉,可以用下面这条命令实现:
sudo rm /usr/bin/python3
通过以上软链接的建立,如果我们在Python代码中添加了下面这句代码:
#!/usr/bin/env python3
那么Python代码在执行时就会使用Python3解释器来执行了,而不是Python2解释器了.
通过以上过程, 就安装好了Python-3.9.10,接下来就是用一个实际例子测试了。
我们用下面这段代码打印出当前使用的Python解释器的版本号。
# -*- coding: utf-8 -*-
# !/usr/bin/env python3
import sys
print("The current Python interpreter version number is:\n", sys.version_info)
我们把上面这段代码保存到文件P-0004.py中,并上传到CentOS 7.5系统的/opt/python_scripts下,
首先确保文件P-0004.py的运行权限打开,
关于权限的相关知识,可以参考博文:
https://blog.csdn.net/wenhao_ir/article/details/130151125
然后执行下面这条语句:
python3 /opt/python_scripts/P-0004.py
运行结果如下:
从上面的结果我们可以看出,我们成功运行了 P-0004.py 并且得到了Python解释器的版本号。
至此,我们就成功实现“在CentOS 7.5上用离线压缩包安装Python-3.9.10”,并用测试代码进行了测试。