Linux入门攻坚——13、实战软件安装-搭建Python3.8环境-1

2024-01-20 21:04

本文主要是介绍Linux入门攻坚——13、实战软件安装-搭建Python3.8环境-1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

到现在,应该可以进行软件安装的实践了。

前面学习Python时,就像搭建一个Linux的服务器环境,一直没有成功,现在尝试在CentOS6.10上搭建Python3.8环境。

安装软件前,需要的前置条件
其一就是网络是连通的,Linux上安装软件,大都需要从网络上安装,这就要求网络畅通,前面的网络属性配置就是做这个准备的。

网络配置,主要涉及本机的IP地址配置,默认网关设置,dns服务器配置。

我的机器使用的是虚拟机,虚拟机的网络配置中用的是:NAT模式(N):用于共享主机的IP地址

虚拟网络编辑器配置:

NAT设置...

DNS设置...

DHCP设置

在安装的Linux上,网卡配置为dhcp获取地址。以CentOS6.10为例

在安装完CentOS6.10后,我只改动了/etc/sysconfig/network-scripts/ifcfg-eth0中ONBOOT=yes,默认是no,然后网络就通了。

也就是在虚拟机中,选了NAT模式,并且其IP获取方式为dhcp,则先由dhcp服务器(IP为254)分配IP,然后其NAT设置中的网关IP,以及DNS设置,会覆盖虚拟机中的相关设置。

关于DNS,这里显示是192.168.138.2,是网关的IP,也就是NAT设备,在使用DNS时,192.168.138.2会再使用其配置的DNS服务器,就是上图中配置的DNS服务器。

有时不知什么原因,IP地址有了(dhcp分配IP成功),就是联不通互联网,一般是默认路由和DNS没有加载成功,这时手工添加默认路由和DNS服务器就行了。

安装软件需要的前置条件
其二就是yum源指定要正确,就是/etc/yum.repo.d/CentOS-Base.repo配置要正确。

系统默认安装的yum源,对于CentOS6.x,一定要修改,不能使用mirrorlist。系统默认的配置:
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
$releasever是主版本号,如6或7,$basearch是基础架构,一般是x86_64(或i386),$infra一般是stock,所以,变量替换后就是:
mirrorlist=http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock,结果如下

如果改成release=6,则结果反馈为:Invalid release/repo/arch combination,查看一个6版本的readme:

说明CentOS 6已经死亡,即不支持了。这时要自己找还提供源的地址,如腾讯的源:

修改repo文件,将mirrorlist改为baseurl=https://mirrors.tencent.com/centos/6.10/os/x86_64/,自己使用,gpgcheck可以设为0,其他的源也是可以修改的,如updates和extras

当然,也可以设置使用光盘作为源,系统默认使用CentOS-Media.repo作为本地光盘的yum源配置,

使用前,需要挂载光盘,否则运行yum会出错.
挂载光盘如:mount /dev/cdrom  /media/CentOS,注意挂载点要是上面三个中的一个

克隆机器的网卡修改,启动克隆的系统,查看网络

发现网卡名变成了eth1

先修改主机名称:hostname study610-f2
修改/etc/sysconfig/network,永久改变主机名

看一下网卡配置文件,以及网络接口识别命名的udev规则配置文件

在/etc/sysconfig/network-scripts/目录下,存在ifcfg-eth0配置文件,其配置是DEVICE为eth0,MAC地址是00:0C:29:06:F1:18,这些都是克隆时拷贝自原系统的设置,再看/etc/udev/rules.d/下,网络接口命名规则是根据70-persistent-net.rules来的,其内有两条,第一条是克隆自原系统的,第二条是内核识别的新系统的设备,所以修改这个配置,删掉第一条,修改第二条的NAME为eth0,再修改ifcfg-eth0配置:


重新启动系统。

一、外围支撑软件的安装
打算使用源码编译安装方式安装Python3.8,需要编译器等软件,安装Development tools软件包组和 Server Platform Development软件包组。

还需要其他一些依赖包:zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel  libffi-devel 

部分包没有安装

yum groupinstall "Development tools"
yum groupinstall "Server Planform Development"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel  libffi-devel 

以上步骤,依赖包和编译需要的工具安装完毕。

二、解决完依赖包问题,就可以安装Python3.8了,看起来很简单,下载源码,然后执行configure、make、make install三步就可以了。

实际安装,会遇到很多问题:
其一是openssl,默认系统安装的是open1.0.1e版本,好像是Python3.8版本需要更高版本的openssl;
其二是sqlite3问题,系统默认已经安装了3.6.20,但是测试安装django后,新增app时提示错误找不到sqlite3模块;
其三是Python多版本问题,系统已经安装了Python2.6.6

查看openssl默认安装情况:

可以看到,按装的位置主要有这几类:
/usr/bin :openssl是二进制可执行程序,即主程序
/etc/pki:相关的配置文件
/usr/lib64:链接库文件

/usr/lib64/openssl/engines:各种安全算法引擎库文件
/usr/share/doc:各种文档文件
/usr/share/man:man手册文件,又分为man1、man5和man7子目录
安装了openssl-devel,还包括了include头文件目录:

查看sqlite安装情况:

查看python安装情况:

三、安装Python3.8

下载源码:Python-3.8.18.tar.xz

执行:tar -xvf Python-3.8.18.tar.xz,会在当前目录下生成Python3.8.18目录

执行:./configure,生成Makefile文件

查看Makefile文件(其中部分):

# Install prefix for architecture-independent files
prefix=		/usr/local# Install prefix for architecture-dependent files
exec_prefix=	${prefix}# Install prefix for data files
datarootdir=    ${prefix}/share# Expanded directories
BINDIR=		${exec_prefix}/bin
LIBDIR=		${exec_prefix}/lib
MANDIR=		${datarootdir}/man
INCLUDEDIR=	${prefix}/include
CONFINCLUDEDIR=	$(exec_prefix)/include
SCRIPTDIR=	$(prefix)/lib
ABIFLAGS=	# Detailed destination directories
BINLIBDEST=	$(LIBDIR)/python$(VERSION)
LIBDEST=	$(SCRIPTDIR)/python$(VERSION)
INCLUDEPY=	$(INCLUDEDIR)/python$(LDVERSION)
CONFINCLUDEPY=	$(CONFINCLUDEDIR)/python$(LDVERSION)# Symbols used for using shared libraries
SHLIB_SUFFIX=	.so
EXT_SUFFIX=	.cpython-38-x86_64-linux-gnu.so
LDSHARED=	$(CC) -shared $(PY_LDFLAGS)
BLDSHARED=	$(CC) -shared $(PY_CORE_LDFLAGS)
LDCXXSHARED=	$(CXX) -shared
DESTSHARED=	$(BINLIBDEST)/lib-dynload# OpenSSL options for setup.py so sysconfig can pick up AC_SUBST() vars.
OPENSSL_INCLUDES= 
OPENSSL_LIBS=-lssl -lcrypto  
OPENSSL_LDFLAGS= 

默认安装路径是/usr/local,也就是prefix=/usr/local

执行:make test,发现

这个版本的python需要openssl1.0.2或1.1

不去管这些,直接make install,在/usr/local下的相关子目录下生成相应文件

bin目录下保存了可执行程序,执行python3

可见Python3.8是安装成功的,执行pip3 list

pip3执行就不成功,ssl模块有问题,这就是上面说的openssl版本不对造成的。

四、安装openssl高版本
这里安装openssl1.1.1w,下载openssl-1.1.1w.tar.gz

执行:tar -xzvf openssl-1.1.1w.tar.gz

执行./config,openssl使用的是config,而不是configure,但效果是一样的,不带任何选项,默认还是安装到/usr/local

其后生成的Makefile中,有如下内容:

安装的最高层目录是/usr/local,OPENSSLDIR是/usr/local/ssl,即配置文件目录,库文件目录是libdir,即是/usr/local/lib64,引擎目录是/usr/local/lib64/engines-1.1

直接执行,make和make install
查看安装位置:

因为新版本的安装位置变了,所以现在与老版本形成共存的状态,而Python安装使用openssl,是安装原来的位置去找openssl,所以需要将原来的版本替换掉:
备份老版本:
可执行程序(二进制程序):

头文件目录:

将新版本链接到老版本的位置,实现替换,即升级老版本。

升级链接库文件:

最后一条写错了,是libcrypto.so

将新的库文件的路径写入/etc/ld.so.conf,然后ldconfig -v使其生效
在/etc/ld.so.conf.d/下新建openssl1.1.conf,将/usr/local/lib64写入其中

然后重新编译安装python3.8,然后pip3就可用了

五、重新安装openssl1.1.1
恢复虚拟机快照至第二步,重新安装openssl1.1.1,这次安装加上选项,安装到不同位置,通过上面的安装过程,可以看到,Python和openssl都安装到了/usr/local/bin下,很混乱。

再看Makefile:

此时的安装位置为/usr/local/openssl1.1,配置文件在/usr/local/openssl1.1/ssl下,库文件路径是/usr/local/openssl1.1/lib

执行make && make install

完成后:

对老版本进行替换:

配置库文件路径写入/etc/ld.so.conf,然后ldconfig -v使其生效

再次安装python3.8

测试:

测试Django:

创建项目没有问题,创建应用时,提示找不到模块“_sqlite3”

六、重新安装Python3.8,安装到独立的目录下
系统重回到刚安装完openssl1.1.1w的状态,完成openssl升级。

#!/bin/bash
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl1.1/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl1.1/include/openssl/ /usr/include/openssl
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.bak
mv /usr/lib64/libcrypto.so /usr/lib64/libcrypto.so.bak
ln -s /usr/local/openssl1.1/lib/libssl.so.1.1  /usr/lib64/libssl.so
ln -s /usr/local/openssl1.1/lib/libcrypto.so.1.1  /usr/lib64/libcrypto.so
cd /etc/ld.so.conf.d/
touch openssl1.1.conf
echo "/usr/local/openssl1.1/lib" > openssl1.1.conf 
ldconfig -v

python3.8安装:./configure --prefix=/usr/local/python3.8  && make && make install

这次安装Python3.8单独安装在自己独立的路径下,避免与其他程序包混交在一块。
问题是需要添加运行路径,其不在PATH环境变量中,不能直接运行python3

七、重新安装Python3.8,安装到独立的目录下,同时不升级openssl(个人推荐)

系统重回到刚安装完openssl1.1.1w的状态,不升级(这里说的不升级,是不对老版本的文件进行替换,即不执行前面脚本的mv和ln命令行),只添加和加载动态链接库:

cd /etc/ld.so.conf.d/
touch openssl1.1.conf
echo "/usr/local/openssl1.1/lib" > openssl1.1.conf 
ldconfig -v

python3.8安装:./configure --prefix=/usr/local/python3.8  --with-openssl=/usr/local/openssl1.1 && make && make install

configure的--with-openssl参数指定安装的高版本openssl的位置,就可以直接使用这个版本的openssl,而不会去找默认的openssl安装位置。

可以看到这种安装方法也能成功安装python和pip,不需要对openssl做过多的操作。
现在问题主要是Python和pip的路径问题,不能直接运行python3和pip3,因为PATH中没有对应的路径。

将python3和pip3的路径加到PATH中:
编辑~/.bashrc,增加一行:export PATH=/usr/local/python3.8/bin:$PATH
保存后,执行source ./.bashrc

现在python3和pip3运行的问题视乎解决了,但是考虑一下,还是有问题的:
只能以python3和pip3来运行新版本,运行python和pip,还是运行python2的版本,解决的方法是在python3安装目录的bin目录下,创建链接:
ln -s /usr/local/python3.8/bin/python3 /usr/local/python3.8/bin/python
ln -s /usr/local/python3.8/bin/pip3 /usr/local/python3.8/bin/pip

重启启动系统,再运行python,就是python3了。
但问题是,系统中有些软件使用的python2版本,其脚本如果直接写的python,就会变成使用python3,有可能造成版本不匹配的问题。

不管怎样,我个人认为这种方法算是最好的了,其他的脚本中可能写的是#!/usr/bin/python,写了全路径,就会调用老版本。

每个版本中都创建python和pip软链接,想使用哪个版本,将哪个版本的路径加到PATH的最开始,使用其他版本时,可以直接使用pythonx.x,也可以使用绝对路径/usr/local/pythonx.x/bin/python

用了将近一个周的时间捣鼓这个软件安装,感觉这个Linux使用真的是很麻烦很难。

下一步就是解决sqlite3的问题了。

这篇关于Linux入门攻坚——13、实战软件安装-搭建Python3.8环境-1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/627330

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper