本文主要阐述如何在centos7.2上搭建Python3的开发环境,目的是为了在Linux环境运行基于wxpy的Python程序。
CentOS7.2 自带有 python,但是却是 python2 版本的 python,Python2.7的版本(Python2.7会在2020年12月份停止维护)。所以现在开发Python的程序,都是推荐使用Python3来开发的。所以必须得给centos7.2装上python3,怎么装?
[root@VM_0_8_centos ~]# whereis python
[root@VM_0_8_centos ~]# cd /usr/bin/
[root@VM_0_8_centos bin]# ll python*
可以看到,python指向的是python2,python2指向的是python2.7,两个版本的python是共存的。
因为 yum 源中并没有现成的 python3 程序,所以必须要自己手动编译安装。
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
#运行这个命令添加epel扩展源
yum -y install epel-release
#安装pip
yum install python-pip
pip install wget
Python3的下载地址:https://www.python.org/downloads/source/
右键,赋值包的下载地址,输入以下命令:
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
也可以去这里下载:https://www.python.org/ftp/python/
#解压
xz -d Python-3.7.3.tar.xz
tar -xf Python-3.7.3.tar
#进入解压后的目录
cd Python-3.7.3
#依次执行下面命令进行手动编译
./configure prefix=/usr/local/python3
make && make install
如果最后没提示出错,就代表正确安装了,在/usr/local/目录下就会有python3目录。
笔者遇到的安装错误是:ModuleNotFoundError: No module named ‘_ctypes’
Python3.7版本需要一个新的包libffi-devel,安装此包之后再次进行编译安装即可。解决办法:
#yum install libffi-devel -y
#make install
两个方案:
1.3.1、如果希望Python程序都使用Python3来运行,可以这样操作:
将原来的软链接“/usr/bin/python”指向“/usr/local/python3/bin/python3.7”,根据下方的命令操作即可:
#将原来的链接备份
mv /usr/bin/python /usr/bin/python.bak
#添加python3的软链接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python
#测试是否安装成功了
python -V
1.3.1.1、更改yum配置
因为yum是用Python2写的,所以需要把yum涉及的Python版本改为Python2,否则yum将不能正常使用。
vi /usr/bin/yum
把#! /usr/bin/python修改为#! /usr/bin/python2
vi /usr/libexec/urlgrabber-ext-down
把#! /usr/bin/python 修改为#! /usr/bin/python2
以上内容,参考了:https://blog.csdn.net/lovefengruoqing/article/details/79284573
1.3.2、建立一个Python3的软链接,
#添加python3的软链接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
#测试是否安装成功了
python3 -V
建立软链接后,可以看到在“/usr/bin/” 下面多了python3
如果是在执行Python命令时,更习惯于Python3这样的来执行,在py文件头添加下面两行代码即可:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
在交互命令环境下,则使用Python3来进入Python环境。
pip install wxpy
可以提前告诉你,这样直接安装wxpy,基于wxpy的Python3的代码运行时会报错!
为什么呢?这是因为Python3的目录下没有wxpy这个包,wxpy被安装到Python2.7的目录下了!
2.1.1、(推荐)指定安装到Python3.7的目录:
pip install --target=/usr/local/python3/lib/python3.7/site-packages wxpy
2.1.2、(推荐)你也可以通过下面命令,建立一个Python3.7下面pip的软链接,然后使用pip3来安装wxpy
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
#使用pip3来安装wxpy
pip3 install wxpy
2.1.3、你也可以修改pip的内容(其路径为:usr/bin/pip),其原始内容为:
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
如果之前在安装完Python3之后,建立了“/usr/local/python3/bin/python3.7”的软链接为python3,则可以将首行代码改为:
#!/usr/bin/python3
如果之前在安装完Python3之后,将原来的软链接“/usr/bin/python”改成了Python3,则可以将首行代码改为:
#!/usr/bin/python
在运行基于wxpy库的程序时,报错了!但是wxpy程序在Windows上跑的还好好的,所以肯定代码没问题!
Python: ImportRequestsError: No module named 'requests'
这个问题比较坑,网上也找了很多方法。例如下面这种(运行程序时,还是提示这个错误)
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install requests
其实,Python的pip具有自动下载的功能,会将安装包自动放置到lib目录,只要是安装Python自己的库,都可以实现。
解决方案也很简单:
python -m pip install requests
安装完后,可以通过代码进行测试一下,进入Python环境,逐行输入以下代码:
import requests
r=requests.get("http://www.baidu.com")
r.encoding='utf-8'
r.text
在centos后台运行python文件,用shell或终端执行命令ssh来运行python时,断开连接的时候程序也关闭了,这时候就需要:
#setsid python3 xxx.py
要进入到文件夹再运行。在进程中,程序会一直运行,是不受连接断开的影响的;
查看是否在进程中:
ps aux | grep .py
其中grep是搜索的意思,搜索含有.py的进程
如果要关闭这个进程
#kill -9 [PID]
-9 表示强迫进程立即停止
kill -9 7029