当前位置: 首页 > news >正文

Linux 多Python版本统一和 PySpark 依赖 python 包方案

背景

Linux 服务器经常有多个Python版本,比如 Python2 有两个版本,Python3 有两个版本。在使用上容易混淆,而且有些需要新增一些 module 更容易,安装如果路径不统一,导致日常使用时,会出现找不到新安装module的问题。

所以目前简单的方案,统一Linux上使用的Python版本。

解决方案

Python 路径

Linux服务器一般可能存在多版本(这里以 Python3 为例,Python2 不建议业务继续使用),一个在 /usr/local/python3 目录下,版本是 3.6.15;  另一个在 /usr/bin/python3 目录下,版本是 3.6.8。

多版本Python容易混淆,而且安装依赖不太方便,后续统一Python使用 系统环境 /usr/bin/python3 ,版本是 3.6.8。

同时 /usr/local/python3/bin/python3 不在使用,先备份这个路径下 /usr/local/python3/bin/python3 版本,然后做一个新的软连接,统一使用系统环境中 python3 版,如下图所示:

mv /usr/local/python3/bin/python3 /usr/local/python3/bin/python3_bak

ln -s /bin/python3   /usr/local/python3/bin/python3
[root@centos ~]# which python3
/usr/bin/python3
[root@centos ~]# cd /usr/local/python3/bin/
[root@centos bin]# ll
total 37312
-rwxr-xr-x 1 root root      111 Jan  1  2022 2to3
-rwxr-xr-x 1 root root      111 Jan  1  2022 2to3-3.6
-rwxr-xr-x 1 root root      252 Jan  1  2022 easy_install-3.6
-rwxr-xr-x 1 root root      109 Jan  1  2022 idle3
-rwxr-xr-x 1 root root      109 Jan  1  2022 idle3.6
-rwxr-xr-x 1 root root      262 Apr 27  2023 normalizer
-rwxr-xr-x 1 root root      243 Mar 30  2023 pip
-rwxr-xr-x 1 root root      243 Mar 30  2023 pip3
-rwxr-xr-x 1 root root      243 Mar 30  2023 pip3.6
-rwxr-xr-x 1 root root       94 Jan  1  2022 pydoc3
-rwxr-xr-x 1 root root       94 Jan  1  2022 pydoc3.6
lrwxrwxrwx 1 root root       12 Mar 30  2023 python3 -> /bin/python3
-rwxr-xr-x 1 root root 12710424 Jan  1  2022 python3.6
-rwxr-xr-x 1 root root     3107 Jan  1  2022 python3.6-config
-rwxr-xr-x 1 root root 12710424 Jan  1  2022 python3.6m
-rwxr-xr-x 1 root root     3107 Jan  1  2022 python3.6m-config
-rwxr-xr-x 1 root root 12710424 Jan  1  2022 python3_bak
-rwxr-xr-x 1 root root     3107 Jan  1  2022 python3-config
-rwxr-xr-x 1 root root      451 Jan  1  2022 pyvenv
-rwxr-xr-x 1 root root      451 Jan  1  2022 pyvenv-3.6
[root@centos bin]# ./python3.6 -V
Python 3.6.15
[root@centos bin]#
[root@centos bin]# python3 -V
Python 3.6.8

Python Module 

业务在使用上,可以需要安装一下Python依赖的module,经过上面的版本统一,所以这样就可以直接使用 pip3 install xxx 即可。

对于 Python Spark 类型的任务,在执行的时候,尽量选择 deploy-mode client 模式。这样会任务会依赖本地的 python3 包。

对于使用 deploy-mode cluster,会依赖 /usr/local/python3/python3.zip 这个包,如果业务任务需要依赖新安装的 module ,此时需要重新打包 python3.zip 包。

[root@centos python3]# pwd
/usr/local/python3
[root@centos python3]# ll
total 2032912
drwxr-xr-x 2 root root      4096 Apr 27  2023 bin
drwxr-xr-x 3 root root      4096 Jan  1  2022 include
drwxr-xr-x 4 root root      4096 Jan  1  2022 lib
-rwxrwxrwx 1 root root 687685756 Jan 15 10:29 python3.zip
drwxr-xr-x 3 root root      4096 Jan  1  2022 share
drwxr-xr-x 6 root root      4096 Apr 27  2023 test

按照上述的使用系统环境变量中版本,这个python包很难去获得。目前只能通过按照到 /usr/local/python3/bin/pip3 install xxx 模式,安装在指定路径下,然后执行  cd /usr/local/python3/ && zip -r python3.zip *   包。

Python Module 虚拟环境打包

PySpark类型的任务默认使用 yarn cluster 模式提交的,所以需要将提交机器上 python3.zip 包上传到 远程的 driver和 executor 上,针对一些新安装的python3模块,需要将安装的模块重新打包到 python3.zip 中。

否则,任务执行会出现找不到 python3 中某个模块。

在Linux Centos上创建一个python3虚拟环境 venv,启动python3虚拟环境,在虚拟环境中安装需要的module即可,具体的详细命令如下,后续会整理成一个自动化脚本:

PS:1.如果有自定义开发的module,需要手动安装一下 ;

        2.下面的Python3的虚拟环境可以复用,不用重复创建。

###注意:下面的Python3的虚拟环境可以复用,不用重复创建


#创建python3虚拟环境路径,使用系统环境变量中python3版本
python3 -m venv  /home/root/python3-venv/

#进入python3虚拟环境目录
cd   /home/root/python3-venv/ 


#获取当前系统环境下python3安装的module
pip3 freeze > requirements.txt


#启动虚拟python3环境
source /home/root/python3-venv/bin/activate


#将系统环境中安装的python3模块安装到虚拟python3环境
pip3 install -r requirements.txt


#退出python3虚拟环境
deactivate


#python3打包
zip -r python3.zip *


mv /usr/local/python3/python3.zip /usr/local/python3/python3.zip.bak.$(date +%Y-%m-%d)


cp /home/root/python3-venv/python3.zip /usr/local/python3/

chmod 777 /usr/local/python3/python3.zip

问题总结

#如果报错:[rootaV-centos]# python3 -m veny/home/root/python3-venv  /home/root/python3-venv/bin/python3'ensurepip','--upgrade" rror: Command'--default-pip']' returned non-zero exit status 1 
#如果上面创建python3虚拟环境命令有问题,可以试试下面这个命令,不复制 pip3,后续通过手动方式安装pip3
python3 -m venv --without-pip /home/root/python3-venv/

cd /home/root/python3-venv/

#启动虚拟python3环境
source /home/root/python3-venv/bin/activate

#下载 3.6 pip3 安装文件
wget  https://bootstrap.pypa.io/pip/3.6/get-pip.py

#安装pip3
sudo python3 get-pip.py

#查看pip3使用的路径
which pip3 

#退出python3虚拟环境
deactivate
   

SO文件问题

调度机上面对应的需要的SO文件,放到 Python3  site-packages 路径下,再打包就好了。

有些so文件,可以放的位置不太一样。比如 librocketmq.so 文件,存放的位置是 /usr/lib/python3.6/site-packages/rocketmq 路径下。

cp /usr/lib64/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so  /usr/lib/python3.6/site-packages

MQ 安装和参考

报错:ImportError: rocketmq dynamic library not found解决方法-CSDN博客

相关文章:

  • 每日学习Java之一万个为什么
  • 论文笔记-WSDM2024-LLMRec
  • 【核心算法篇十三】《DeepSeek自监督学习:图像补全预训练方案》
  • leetcode_位运算 67.二进制求和
  • 关于 BK3633 上电时受串口 UART2 影响而无法启动的问题说明
  • 开发一个交易所需要哪些技术
  • 分布式之分布式ID
  • C语言(21)
  • 掌握 ElasticSearch的 _source 过滤
  • LLM 学习2
  • 服务器创建conda环境并安装使用jupyter
  • ChromeDriver下载
  • 2.19c++练习
  • 鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案
  • express-validator 数据校验详解
  • Redis未授权访问漏洞原理
  • 《Real-IAD: 用于基准测试多功能工业异常检测的真实世界多视角数据集》学习笔记
  • 【NLP算法面经】字节跳动算法岗四面详细面经(★附面题总结★)
  • 《GB∕T 43206-2023 信息安全技术 信息系统密码应用测评要求》介绍,4月1日起正式施行
  • pandas连接mysql数据库
  • 赖清德为“临阵脱逃”作准备,国台办:绝不会任“台独”祸首逍遥法外
  • 经济日报整版聚焦:上海构建法治化营商环境,交出高分答卷
  • 复旦大学与上海杨浦共建市东医院
  • 超新星|18岁冲击中超金靴,王钰栋的未来无限可能
  • 日本广岛大学一处拆迁工地发现疑似未爆弹
  • 来伊份:已下架涉事批次蜜枣粽产品,消费者可获额外补偿,取得实物后进一步分析