Windows10 WSL子系统安装CentOS7、OpenSSL-3.0.5 及 Python-3.10.7
本文版权归博主 惊梦无痕 所有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。原文地址
Linux小白一个,最近打算在 Linux 环境中学习 Python,但又不想安装双系统,最后选择了 Windows 子系统 WSL,安装了 CentOS7,又磕磕碰碰地花了几天时间来安装 Python-3.10.7,期间遇到各种报错,通过百度尝试了N种方法逐一解决,总算给安装成功了,这里整理并记录一下安装步骤及踩到的各种坑,希望对正在找如何解决问题的你有点帮助。
一、Windows10 WSL子系统安装CentOS-7.9
1、安装前的准备工作
也可以使用管理员权限打开 powershell,执行如下命令启用:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
2、下载 CentOS 7.9版本
https://github.com/mishamosher/CentOS-WSL/releases/tag/7.9-2111
3、安装CentOS7
4、卸载CentOS7
要卸载它,请将 PowerShell 作为管理员切换到 CentOS 目录
./CentOS7.exe clean
5、升级 Linux 版本
# 升级所有包,系统版本和内核,改变软件设置和系统设置
yum -y update
二、CenrOS7 源码安装 OpenSSL-3.0.5
1、安装环境所需依赖
yum -y install gcc gcc-c++ openssl-devel bzip2-devel libffi-devel zlib-devel xz-devel
yum -y groupinstall "Development Tools"
可以用rpm -q 来检查依赖是否安装成功,如:
rpm -q openssl-devel
如果安装不成功,则可以等下面把openssl安装完后再来安装 openssl-devel:
2、查看是否安装了 pip
python -m pip --version
如以上提示,则表示未安装。
安装 Python3 对应的 pip:
yum -y install epel-release
yum -y install python3-pip
# 查看pip版本
pip3 --version
3、安装 Python 3.10 必需的 openssl >= 1.1.1,此处安装 3.0.5 版本
# 下载目录
cd /usr/local
# 通过 wget 命令下载,没有就使用 yum -y install wget 安装 wget
wget https://www.openssl.org/source/openssl-3.0.5.tar.gz
# 解压安装包
tar zxf openssl-3.0.5.tar.gz
# 进入解压后的目录
cd openssl-3.0.5
# 执行配置命令,指定openssl环境的安装目录
# 注意:一定要加 shared zlib 否则后面会出问题,后面有写
./config --prefix=/usr/local/openssl-3.0.5 shared zlib
此时可能出现错误如下:
解决方法:
yum -y install perl-IPC-Cmd
再次执行:
./config --prefix=/usr/local/openssl-3.0.5 shared zlib
# 编译并安装
make && make install
4、添加OPENSSL的环境变量
# 在文件 profile 最后一行添加如下内容:
# export OPENSSL=/usr/local/openssl-3.0.5/bin
# export PATH=$OPENSSL:$PATH:$HOME/bin
# vim命令报错就使用 yum -y install vim 安装 vim
vim /etc/profile
# 使用命令生效
source /etc/profile
查看安装结果:
但是 openssl 还不能使用
libssl.so.3 文件在/usr/local/openssl-3.0.5/lib64目录下面,需要配置到共享库中:
解决方法:
# 换行添加 /usr/local/openssl-3.0.5/lib64
vim /etc/ld.so.conf
上述操作也可以通过直接调用命令语句的方式将内容添加到 ld.so.conf 文件末尾
# 注意:路径最后不带“/”,否则报错
echo "/usr/local/openssl-3.0.5/lib64" >> /etc/ld.so.conf
# 加载生效
# 说明:ldconfig 命令用于在默认搜寻目录 /lib 和 /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库。
ldconfig
# 再次进入 /usr/local/openssl-3.0.5/bin 目录下执行命令已经成功了
./openssl version
进入/usr/bin目录下,执行以下命令:
# 建立软链接,类似于Windows中的快捷方式: ln -s 源文件 目标文件
ln -s /usr/local/openssl-3.0.5/bin/openssl /usr/bin/openssl3
ln -s /usr/local/openssl-3.0.5/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
ln -s /usr/local/openssl-3.0.5/lib64/libssl.so.3 /usr/lib64/libssl.so.3
之后就可以在任意地方执行openssl3命令
# 自己安装的 openssl3
openssl3 version
# yum 安装自带的 openssl
openssl version
三、CenrOS7 源码安装 Python 3.10.7
1、准备安装 Python 3.10.7
# 下载目录
cd /usr/local
# 下载Python-3.10.7版本
wget https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tgz
# 解压安装包
tar zxf Python-3.10.7.tgz
# 进入解压后的目录
cd Python-3.10.7
2、修改OpenSSL编译的路径
注意(非常重要,关系到后续是否能够安装成功):
# 安装前必须先配置如下文件:
# 这是血的教训,就因为没提前配置,后续安装出现异常,怎么安装都成功不了,
# 最终只能把 Python-3.10.7 文件夹整个删除再重新按步骤安装才成功
# 文件路径:/usr/local/Python-3.10.7/Modules/Setup
vim ./Modules/Setup
原文件(用 vi 命令打开的):
改为如下:
这里说明一下,因为没有提前修改配置导致后续的安装失败,但是在网上找了很久都没有成功解决安装报错的问题,基本上所有的安装教程都只是或多或少简单地描述了一下,即把 SSL=/usr/local/ssl 及以下三行注释去掉就能安装成功。然而我尝试了N多次都没有成功过,后来还是自己无意中搜索到 https://www.likecs.com/show-305386216.html 这个网页才找到了些许线索,最终摸索着才解决掉这个问题的,实际这个配置是和安装版本有很大关系的,需要根据各自安装的文件来作修改,
1、如果需要可以把 _socket socketmodule.c 注释也去掉吧
2、在Python-3.10.7这个版本中这里的 SSL 已经改成 OPENSSL 了,千万不要找错地方了(可以用 /OPENSSL 进行搜索)
3、OPENSSL对应的路径要特别注意,它指向的是 OpenSSL 的安装目录,网上很多安装教程都没有说明
4、 _ssl 路径中的 OPENSSL 就是你安装完 OpenSSL 后注册的环境变量 OPENSSL,另外要注意的是实际安装目录下是没有 lib 文件夹的,所以要把 -L$(OPENSSL)/lib 改为 -L$(OPENSSL)/lib64
好了,现在已经完成安装文件的配置了,那么就继续往下安装吧!
# 执行配置命令,指定Python环境的安装目录
# 说明:
# 标志(enable-optimizations)启用Profile引导优化(PGO)和链路时间优化(LTO)
# 设置 OpenSSL 库的运行时库目录(rpath)。auto:根据 --with-openssl 和 pkg-config 自动检测 rpath
./configure --enable-optimizations --with-openssl=/usr/local/openssl-3.0.5 --with-openssl-rpath=auto
# altinstall跳过创建python链接和手册页链接的操作,防止多版本并存的冲突
make altinstall
如果出现如下错误:
解决方法:
# 从错误信息分析,就是缺少了zlib的解压缩类库,安装即可
yum -y install zlib*
# 重新安装
make altinstall
如果出现以下错误:
大致意思:以“root”用户运行pip可能导致权限中断,并与系统包管理器的行为冲突。建议使用虚拟环境。导致了更新或者下载pip时候下载失败。
解决方案:
a、创建虚拟环境
# 创建Python3(可以根据实际使用版本进行切换)的虚拟环境,正常不显示回显
python3 -m venv tutorial-env
# 激活虚拟环境,正常不显示回显
source tutorial-env/bin/activate
# 退出虚拟环境命令:
deactivate
# 如果想重新创建一个新的虚拟环境,可以先删除原虚拟环境
rm -rf tutorial-env
b、在虚拟环境中重新安装python模块包,会提示再次更新
python -m pip install novas
提示更新后即成功:
pip install --upgrade pip
3、配置Python的环境变量
配置环境变量主要是能快速使用pip3安装命令。
# 在文件 bash_profile 最后一行添加如下内容:
# export PYTHON_HOME=/root/training/Python-3.6.5 # export PATH=$PYTHON_HOME/bin:$PATH
vi ~/.bash_profile
# 使配置生效
source ~/.bash_profile
4、创建新版本的软链接
# 备份旧版本(看实际情况,可以不动默认链接,改用 python3 或 pip3 命名的软链接,这里采用替换默认链接的方式)
mv /usr/bin/python /usr/bin/python_bak mv /usr/bin/pip /usr/bin/pip_bak
# 创建新版本的软链接
ln -s /usr/local/bin/python3.10 /usr/bin/python ln -s /usr/local/bin/pip3.10 /usr/bin/pip
验证 ssl 已安装成功:
5、修改 yum
由于 yum 是 Python2 写的,所以更新到Python3 版本后,yum 可能会出现错误,需要修改配置文件:
vi /usr/bin/yum
将第一行:
改为:
vi /usr/libexec/urlgrabber-ext-down
将第一行:
改为:
至此 CentOS7、OpenSSL-3.0.5 和 Python-3.10.7 安装成功!