当前位置: 首页 > 科技观察

在CentOS7上安装配置Python3.6环境

时间:2023-03-14 23:32:21 科技观察

好久没更新了,不好意思~今天受邀写一篇关于如何在CentOS7上配置Python3环境的文章,一般我选择直接扔掉我早年写的一篇源码编译MongoDB的文章,让他们看一下源码编译Python的那一节,其实那一节讲得不是很详细,最近也被很多人催促,所以我还是单独写一篇吧。目前安装的CentOS7.3默认安装Python2,默认官方yum源不提供Python3安装包。有些用户想升级到Python3,但实际上可能会出现各种问题导致错误。相比之下,激进的Fedora社区在23日将默认版本更改为Python3(如果我没记错的话)。先说一下我使用的系统环境,新建一个Docker容器。使用cat/etc/redhat-release查看您运行的是CentOS7.3。在纯CentOS系统上安装Python环境主要有两种方式。一种是通过源码编译安装,另一种是安装预先打包好的RPM包。根据个人习惯,我们先来看看如何通过源码编译安装Python3.6和配置虚拟环境。使用源码编译安装基础环境。先安装安装几个必要的包,方便后续操作?yuminstallwgetgccmake?#wget用于下载源码包/www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xzunpack,unpack?xz-dPython-3.6.1.tar.xz?tar-xvfPython-3.6.1。tarcompile?cdPython-3.6.1?./configure--prefix=/usr/local/python3.6--enable-optimizations?先解释一下上面的参数,--prefix是预期的安装目录,--enable-optimizations在使用优化选项(LTO、PGO等)加上这个标志进行编译后,性能将优化大约10%(如果我没记错的话),但这会显着增加编译时间。不过LTO和PGO不在今天文章的讨论范围之内。建议有兴趣的可以看看LTO在GCC中的具体实现。应该不太会写相关的文章了哈哈哈,毕竟写的停不下来。接下来?make?makeinstall如图,会看到报错,提示zlibnotavailable所以,我们需要安装依赖?yuminstallzlib-devel那么为什么需要这个依赖包呢?其实是因为Python有一个非常重要的内置模块zipimport,用于从Zip压缩包中导入模块。而如果没有zlib包,那就无法解压,自然也就无法使用这个模块了。我们的依赖安装完成后,重新执行上面的编译安装步骤,发现执行成功了。?/usr/local/python3.6/bin/python3--versionPython3.6.1至此,我们的Python3就安装成功了。检查、编译和安装还不够,让我们做一些检查。当我们运行Python终端,输入importbz2,会发现并没有这个模块。如果您不熟悉这个模块,也没关系。我们输入importsqlite3,熟悉Python的同学对sqlite3应该不会太陌生,但是如果你还不熟悉,那么可以按方向键试试看。你有没有注意到输出变成了类似^[[D^[[A?熟悉Python源码的同学一定知道我要说什么。但如果你不熟悉,没关系,我会告诉你。一般来说,在终端中,我们期望输入上方向键时,会显示上一条命令,左方向键可以用来将光标向左移动。但现实与我们的预期不同。是什么原因?这涉及到输入设备的一点历史原因。简单地说,需要一个模块来转义用户的输入。回到本文的重点,我们编译安装的时候少了readline模块。既然问题已经找到,解决方法其实也很简单?yuminstallreadline-devel安装完成后,重复以上步骤,编译&&安装。再次查看,方向键输入的问题只是解决了,但是我说的两个模块还是无法导入,所以我们仔细看看我们编译过程的输出。有这么一段(根据系统环境不同,输出也可能不一致)Pythonbuildfinishedsuccessful!Thenecessarybitstobuildtheseoptionalmoduleswerenotfound:_cursesbz2_dbm_gdbm_lzma_sqlite3_tkinterreadline要找到必要的bits,lookinsetup.pyindetect_modules()forthemodule'sname。根据我们上面的提示,很明显缺少一些(可选)。模块,如果你认为你不会用到这些模块,你可以忽略它们。我会更多地使用这些模块,甚至是大多数人不会接触的TK模块哈哈哈。解决方法就是安装相应的模块。?#Resolveimportbz2error?yuminstallbzip2-devel?#Resolveimportcurseserror?yuminstallncurses-devel?#Resolveimportsqlite3error?yuminstallsqlite-devel?#Resolve_dbm_gdbmmissingreminder?yuminstallgdbm-devel#Resolve_lzmamissingreminder?yuminstallncurses-develmissingreminder?yuminstalltk-devel?#解决readlinemissingreminder和arrowkeybehaviorunexpected的问题?yuminstallreadline-devel安装这些模块后,重新编译会发现提示消失了,安装即可。使用rpm包安装。首先,让我介绍一下IUS社区。全称是[InlinewithUpstreamStable]加上首字母。它主要是一个提供新版本RPM包的社区。具体用法可以查看官方文档。简单的说,就是按下面的命令来操作。?yum-yinstallhttps://centos7.iuscommunity.org/ius-release.rpm添加IUS后,先创建缓存元数据,然后安装然后直接在终端输入python3。上面的环境配置只写了Python的安装。如果是rpm安装,直接可用。但是如果是源码编译的话,就不用每次都输入一大串路径了。所以解决方法很简单,加个链接就行了。?ln-s/usr/local/python3.6/bin/python3/usr/bin/python3另外,当系统中存在多个Python版本时,尽量避免环境污染。个人比较推荐使用virtualenv来创建一个独立的虚拟环境,这是我在日常生活中使用的。不过我们安装好Python3.6之后,直接执行下面的命令就可以创建虚拟环境了。?python3-mvenvpy3?sourcepy3/bin/activate(py3)?python-VPython3.6.1总结在CentOS7上安装Python3.6主要有两种方式,源码编译和RPM包安装。对于想快速使用源码配置环境又不想关心具体原因的读者,可以直接使用我GitHub上提供的脚本安装https://raw.githubusercontent.com/tao12345666333/dotfiles/master/env/install_Python36_on_CentOS7.sh另外Python3.6可以直接使用python3-mvenvvenv_name创建虚拟环境。