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

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博客


http://www.kler.cn/a/553296.html

相关文章:

  • 如何在自定义组件中使用v-model实现双向绑定
  • JupyterNotebook高级使用:常用魔法命令
  • MyBatis-Plus之通用枚举
  • 懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)
  • 15.1 Process(进程)类
  • 智信BI:解决Power BI全面兼容问题的新选择
  • 强化学习能让小模型多恐怖?
  • 【Go语言快速上手】第二部分:Go语言进阶之测试与性能优化
  • 大语言模型中one-hot编码和embedding之间的区别?
  • docker 安装 Rabbitmq 详解
  • linux使用
  • 【C语言】fwrite函数用法介绍
  • Kafka消息服务之Java工具类
  • 【组态PLC】基于博图V16和组态王六层双部电梯组态设计【含PLC组态源码 M008期】
  • 全新的Android UI框架Jetpack Compose
  • 深度学习在遥感影像分析中的应用:地物分类、目标识别、图像分割
  • Bigemap Pro如何设置经纬网出图网格设置
  • 玩机日记 10 群晖开启文件服务挂载到手机/电脑,测试传输性能
  • 用 Biome 替代 ESLint 和 Prettier
  • SpringBean生命周期的执行流程