尝试在CentOS7上安装Python3.7,对一个新手来说,还是有挺多东西需要注意的。具体步骤如下:
1、下载
下载python3,wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
解压到本地目录,比如现在在/home/user1,会在当前目录产生一个Python-3.7.3目录。
tar -xzvf Python-3.7.3.tgz
2、make安装
进入Python-3.7.3目录,先configure
./configure --prefix=/usr/local/python3.7.3
成功(此时已经将安装文件放到/usr/local的目录了)。
make && make install
麻烦了,出错了。提示:Module Not Found Error: No module named '_ctypes'
那么理论上我应该找到_ctypes才行。
查了一下csdn前辈们的足迹,原来3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可。这个问题归属于python的错误31652 https://bugs.python.org/issue31652
#yum install libffi-devel -y #make install
如果……又很不幸,先把原来的python2给删除了,恭喜,又中奖了。那么需要去centos.org上面找rpm包,以rpm方式安装libffi。这里不再赘述。当然,你在百度上面libffi centos rpm,就能在rpmfind.NET上找到下载,注意选择自己的操作系统版本啊。
查了一下这个issue,哇btw,Ubuntu也会出现问题的,这里有一个18版本的依赖大礼包:
> I expect that the root cause is missing libffi(-dev[el]) on your system Yes, on my Ubuntu 18.04, `make` failed to compile _ctypes module. After install libffi-dev, it was compiled successfully: One more word, full necessary dependencies on my Ubuntu 18.04: sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev zlib1g-dev libssl-dev openssl libgdbm-dev libgdbm-compat-dev liblzma-dev libreadline-dev libncursesw5-dev libffi-dev uuid-dev
如果libffi安装到了别的地方……参考以下:
the reason was that libffi was installed under /opt/local, so the fix was: ./configure LDFLAGS='-L/opt/local/lib -R/opt/local/lib'
3、建立快捷方式(链接)
完了么?没完。此时,/home/user1/python3.7.3中应该有python可执行程序了,但是系统可能还不知道,在任何一个目录输入python时,到make之后的目录找python程序。如果是系统自带,我的是python2.7,运行一下python,会告知你这是:2.7.5。或者python --version,可以看到输出版本号。
再找到软链接。查看python命令在当前系统对应哪一个文件。
>whereis python python: /usr/bin/python ...
查看这个python对应的是什么 ls -al /usr/bin/python
/usr/bin/python -> python2
让我们用一个软链接指向新安装的python3这里吧。
mv ./python pythonold #将原来的python链接改名 cp /usr/local/python3.7.3/python3 /usr/bin/python3 #拷贝新的python到bin目录,这也是一个链接文件,指向的是local/python3.7.3下面的python3.7 ln -s ./python3 ./python #如果连接文件已经有了,我也可以直接修改连接文件来建立链接 ln -snf /usr/local/python3.7.3/python3 /usr/bin/python
现在输入python看到version是3.7.3了。进入python解释环境之后:
>>import time >>print(time) <module‘time(built-in)’> >>import sys >>print(sys.path) ['', '/usr/local/python3.7.3/lib/........']
4、建立pip
还有一个东西没装,pip。在/usr/local/python3.7.3/bin下面可见pip3
ln -s /usr/local/python3.7.3/bin/pip3 /usr/bin/pip
#建立pip到pip3的链接
python3.7是没有安装numpy的,安装一个试试:
pip install numpy
如果正常的开始collecting,就没问题了。