||
今天安装一个基于Python的程序,这是第一次接触Python,遇到很多问题,值得一记。
系统:CentOS 7
(1)Python3的安装
简单
yum -y install python3
(2)pip安装、升级及其问题
初以为需要用Python2,故安装了pip,并一顿折腾版本升级;但后来发现需要用pip3,而pip3在安装Python3时已经自带了,所以问题不存在了。尽管如此,仍将pip安装与升级过程记录下来。
首先,安装扩展源EPEL:
yum -y install epel-release
而后,安装pip:
yum -y install python-pip
检查是否安装成功:
pip -V
pip升级(开始出问题了):
pip install --upgrade pip
结果显示报错,细节没看,总之升级失败:原本版本8.3.2,最新版本24.0。查阅网络资料得知,“这个问题主要的原因是pip直接升级跨度太大”,解决思路是从邻近版本进行升级:
python -m pip install --upgrade pip==10.0.1
python -m pip install --upgrade pip==18.0
python -m pip install --upgrade pip==20.3.4
最后只升级到这个版本,作罢。
(3)利用pip3安装那个python程序
手册里的命令很简单:
pip install [程序名]
但直接报错,显示不理解程序里的话。没办法,改成
pip3 install [程序名]
跑成功了。原以为大功告成,拿测试输入卡试试吧:
python3 run_test.py
失败!说没有numpy模块,一查可以安装:
pip3 install numpy
OK了。再重新测试输入卡,又失败,说我没有装scipy,那就再装:
pip3 install scipy
OK了。再重新测试输入卡,又失败,说我没有装numba,这回陷入了新的麻烦了。。
pip3 install llvmlite==0.31.0
(这步成功)
pip3 install numba
这步失败,显示缺东西,一查:需要安装LLVM 8.0。开启以下支线任务。
(3.1)LLVM安装
下载LLVM 8.0(即LLVM source code (.sig))及相应的cfe 8.0(即Clang source code (.sig)),而后解压。接着,做如下文件夹整理:
mv llvm-8.0.0.src llvm
mv cfe-8.0.0.src clang
mkdir build
cd build
在路径上并列有llvm、clang、build三个文件夹。
接下来开始编译:
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_PROJECTS="clang" -G "Unix Makefiles" ../llvm
make -j4
make install
可在.bashrc里指定环境变量
export PATH=/opt/llvm/lib:$PATH
export LLVM_CONFIG=/opt/llvm/bin/llvm-config
在cmake的过程中报错,说我的gcc版本过低(4.9.2),应该至少为5.1。为此再开支线任务,重新更新了gcc版本。
(3.1.1)gcc升级
下载gcc后,解压,而后:
cd gcc-5.1.0
./contrib/download_prerequisities
cd ..
mkdir gcc-5.1.0-build
cd gcc-5.1.0-build
../gcc-5.1.0/configure --enable-checking=release --enable=languages=c,c++,fortran --disable-multilib
make -j4
make install
gcc --version
尽管此时已经显示5.1.0的版本了,但cmake时仍然显示4.9.2的gcc,查到资料里说:gcc默认安装路径是/usr/local/bin,而cmake找的是/usr/bin,为此进行检查:
gcc --version
g++ --version
c++ --version
均显示为5.1.0;
/usr/bin/gcc --version
/usr/bin/g++ --version
/usr/bin/c++ --version
均显示为4.9.2。解决方案为新建符号链接:
rm -rf /usr/bin/gcc
ln -s /usr/local/bin/gcc /usr/bin/gcc
rm -rf /usr/bin/g++
ln -s /usr/local/bin/g++ /usr/bin/g++
rm -rf /usr/bin/c++
ln -s /usr/local/bin/c++ /usr/bin/c++
如此处理后,再次cmake调用的就是新版gcc了(gfortran未新建符号链接)。
cmake通过,满心欢喜,make时又报错:/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found。于是新支线任务启动!
(3.1.2)/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found的解决
资料中说:调用的是高版本的gcc,生成的动态库没有替换老版本的gcc的动态库。解决方法如下:
首先查询libstdc++.so.6支持版本:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
显示了很多动态库文件GLIBCXX,最大版本号到3.4.20,确实没有3.4.21。
再查阅原来的libstdc++.so.6版本:
ll /usr/lib64/libstdc++.so.6
显示其指向libstdc++.so.6.0.20。
在本地搜寻libstdc++.so.6的高版本(亦可从网上查找):
find / -name "libstdc++.so.6.0"
结果发现在/usr/local/lib64里有一个libstdc++.so.6.0.21,故将其复制到/lib64中,而后删除原来的链接,新建新的软链接:
ln -s /lib64/libstdc++.so.6.0.21 /lib64/libstdc++.so.6
再查一下libstdc++.so.6版本
ll /usr/lib64/libstdc++.so.6
显示其指向libstdc++.so.6.0.21。
搞定(这一步)!
=====>>>>
回归主线numba,折腾半天还是不对劲,但是我执行了这样一句
pip3 install numba==0.48.0
居然成功了!!!
新错误:说我没有装matplotlib,查阅资料处理:
yum update python-devel
yum install python3-devel
(不写第一句会报错冲突)
(不执行这一步,在下一步会出现致命错误:Python.h没有那个文件或目录!)
而后:
pip3 install matplotlib
安装成功!
(4)python程序安装成功了,可是画图有点问题。。。但也解决啦!
以test.py作为输入卡名:
python3 test.py
又出现一个报错:
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
plt.show()
还是耐心地处理吧!
查资料!
在test.py文件中的import matplotlib.pyplot as plt前加上两句话,即
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
但此时会报错:ModuleNotFoundError: No module named 'tkinter'。为此安装tkinter(Centos下):
yum install python3-tkinter
这回可以啦!
(安装好tkinter后不用再添加import matplotlib和matplotlib.use('TkAgg')这两句了)
python3 test.py
既得到了结果,也生成了图片!
此外,还了解到可以用以下语句:
plt.savefig('my-plot.png')
这可以直接保存图片。
一个上午+一个晚上的辛劳终于有所收获,不但推进了工作的进程,还接触了如此神奇的python语言和各种小技巧,能够睡个香香的觉啦!
2024年4月9日 夜11:00
【参考资料】
(1)CentOS 使用yum安装 pip · Python / Linux / Mysql / 软件测试等等 · 看云 (kancloud.cn):https://www.kancloud.cn/zjut_cheng/python_linux_mysql/2075809
(2)centos 升级pip报错问题 - 简书 (jianshu.com):https://www.jianshu.com/p/a2cb5c2ec820
(3)【pip】CentOS7.x 升级pip失败报错处理_centos7更新pip报错-CSDN博客:
https://blog.csdn.net/michaelwoshi/article/details/115220421
(4)python enum 安装 python numba安装_deanyuancn的技术博客_51CTO博客:
https://blog.51cto.com/u_13544/6679977
(5)numba的安装: No module named numba_no module named 'numba-CSDN博客:
https://blog.csdn.net/mao_hui_fei/article/details/120853017
(6)Python安装llvmlite、numba报错解决方案-CSDN博客:https://blog.csdn.net/qq_41977618/article/details/119572879
(7)【arm64】LLVM 8.0.0 安装 - 简书 (jianshu.com):
(8)LLVM Download Page:https://releases.llvm.org/download.html
(9)linux编译gcc5.1.0,Linux编译安装GCC 5.1.0-CSDN博客:https://blog.csdn.net/weixin_29066781/article/details/116829756
(10)linux手动安装gcc-5.1.0「建议收藏」-腾讯云开发者社区-腾讯云 (tencent.com):https://cloud.tencent.com/developer/article/2091112
(11)清华大学开元镜像源里的gcc:https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-5.1.0/gcc-5.1.0.tar.gz
(12)CentOS7源码编译安装LLVM_centos7 llvm-CSDN博客:https://blog.csdn.net/qq_35139125/article/details/129393091
(13)CentOS7 上cmake 生成旧版gcc_cmake 安装完怎么还是旧版本-CSDN博客:https://blog.csdn.net/ivy202/article/details/135023252
(14)搞定libstdc++.so.6 version GLIBCXX_3.4.21 not found-CSDN博客:https://blog.csdn.net/duzm200542901104/article/details/132218862
(15)Matplotlib is currently using agg, which is non-GUI backend | bobbyhadz:https://bobbyhadz.com/blog/user-warning-matplotlib-is-currently-using-agg-which-is-non-gui
(16)ModuleNotFoundError: No module named 'tkinter' in Python | bobbyhadz:https://bobbyhadz.com/blog/python-no-module-named-tkinter
(17)解决UserWarning: Matplotlib is currently using agg, which is a non - 哔哩哔哩 (bilibili.com):https://www.bilibili.com/read/cv23193866/
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-16 11:25
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社