Python-3.12.0源码包编译安装安装到centos7.5(其他版本类似原理相同)
✅官网:https://www.python.org/downloads/source/ 太慢
✅镜像网站:https://registry.npmmirror.com/binary.html?path=python/3.12.0/
选择Python-3.12.0.tgz安装包下载即可
sudo yum update
sudo 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 gcc libffi-devel
tar -zxvf Python-3.12.0.tgz -C /opt/module/
./configure --enable-shared
# --prefix=xxx:指定python的安装目录,默认位置/usr/local/bin/
# --enable-shared:配置构建选项的命令,构建过程中启用共享库支持
# --enable-optimizations会将其构建为一个共享库,这可以减少内存占用并提高启动速度
make && make install
/usr/local/bin/python3 -V
# 可能会报错,找不到共享库,解决见最底下
# 链接
sudo ln -s /usr/local/bin/python3 /usr/bin/python-3.12.0
sudo vim /etc/profile.d/my_env.sh
# PYTHON_HOME
export PYTHON_HOME=/usr/local/bin
export PATH=$PYTHON_HOME/bin:$PATH
source /etc/profile
python2
python3
# 前面链接了,所以好使
[root@hadoop102 bin]$ python-3.12.0
Python 3.12.0 (main, Dec 15 2023, 19:37:09) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
/usr/local/bin 安装python-3.12.0的位置
/usr/local/lib python-3.12.0共享库文件的位置
/usr/bin 执行命令的 以及系统自带的python2和python3都在这里
# ll /usr/bin/ | grep python
error while loading shared libraries: xx.so: cannot open shared object file: No such file 错误的原因和解决办法,执行某些外部程序的时候可能会提示找不到共享库的错误,原因一般有两个:一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.另外一个原因就是已经安装了该共享库, 但 执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
解决1:如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
ldconfig
解决2:如果共享库文件安装到了/usr/local/lib(开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中
sudo cat /etc/ld.so.conf
sudo echo "/usr/local/lib" >> /etc/ld.so.conf
sudo ldconfig
解决3:如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下,但是又不想在/etc/ld.so.conf中加路径 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库.比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell或者my_env.sh里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH