主页 > IT业界  > 

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

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

标签:

Linux多Python版本统一和PySpark依赖python包方案由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Linux多Python版本统一和PySpark依赖python包方案