###写在前面的话
在linux上部署Scrapy和Django比在window上麻烦很多,由于使用当前最新版本也造成各种问题的出现,由于自身对linux不是很熟悉,在模拟部署环境的时候踩坑不少,所以记一篇经验浅谈,供自己今后遇到类似问题进行查阅。
####准备工作
1、python:Python-3.6.2
2、Scrapy:Scrapy-1.4.0
3、Django:Django-1.11.4
4、各种依赖(有些依赖不需单独下载,用yum来安装即可):
zlib-1.2.11.tar.gz(在安装python3.6.2时使用)
####第一步:升级python
CentOS6.8是自带python的,但是版本却是python2.6.6
[root@jdu4e00u53f7 ~]# python -V
Python 2.6.6
我们需要的是python3.6.2,所以需要对python的版本做一下升级,为了避免兼容性问题,我们依旧保留了python2.6.6。
1、将下载好的python3.6.2上传到linux中,我习惯性的在/etc目录下建立soft文件夹,将Python-3.6.2.tgz上传,解压文件并进入目录
[root@jdu4e00u53f7 soft]# tar xvf Python-3.6.2.tgz
[root@jdu4e00u53f7 soft]# cd Python-3.6.2
2、创建一个编译安装目录,
[root@jdu4e00u53f7 Python-3.6.2]# mkdir /usr/local/python3
3、安装依赖
如果系统中没有安装gcc,配置编译安装目录时会报错
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for python3.6... no
checking for python3... no
checking for python... python
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... linux
checking for --without-gcc... no
checking for --with-icc... no
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in '/opt/soft/Python-3.6.2':
configure: error: no acceptable C compiler found in $PATH
See 'config.log' for more details
因此我们要先用yum安装gcc
[root@jdu4e00u53f7 Python-3.6.2]# yum install gcc
请用命令查看当前系统中是否安装了openssl
[root@jdu4e00u53f7 Python-3.6.2]# rpm -aq | grep -i openssl
openssl-1.0.1e-57.el6.x86_64
openssl-devel-1.0.1e-57.el6.x86_64
请注意,这里一定要是两个,openssl和openssl,缺少哪儿个就用yum安装哪儿个,再次提醒一定要安装,否则之后的pip会报错,安装后需要重新编译安装python。这个是个大坑。我就是没有注意,在之后使用pip时会一直报如下错误,不能使用。
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
请注意,又一个坑,在编译安装之前,一定要先修改一下setup.py这个文件,具体修改内容如下
sqlite_inc_paths = [ '/usr/include',
'/usr/local/sqlite3/include' #增加该行
'/usr/include/sqlite',
'/usr/include/sqlite3',
'/usr/local/include',
'/usr/local/include/sqlite',
'/usr/local/include/sqlite3',
]
同时要用yum安装sqlite-devel。否则到后面会报缺少文件的错误,到时候又得重新再来(记不清这是重新再来的第几次了,哭)
4、配置编译安装目录
[root@jdu4e00u53f7 Python-3.6.2]# ./configure --prefix=/usr/local/python3
5、编译安装
[root@jdu4e00u53f7 Python-3.6.2]# make && make install
6、如果在步骤5最后出现如下错误
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
请安装zlib
安装zlib步骤和安装python类似,都是解压,配置编译目录,编译安装,在此不做详述,下载zlib官方网址http://www.zlib.net/
如果没有出现改错误,请跳过本步骤。
成功安装zlib后,重新对python进行编译安装
7、备份旧的python
[root@jdu4e00u53f7 Python-3.6.2]# mv /usr/bin/python /usr/bin/python_old
8、把新版本的python3.6.2链接到python,python3.6.2自带pip3,我们需要把pip3链接放至/usr/bin目录下,方便之后的使用
[root@jdu4e00u53f7 Python-3.6.2]# ln -s /usr/local/python3/bin/python3 /usr/bin/python
[root@jdu4e00u53f7 Python-3.6.2]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
9、测试python3.6.2是否安装成功
[root@jdu4e00u53f7 Python-3.6.2]# python -V
Python 3.6.2
- 升级python会导致yum不可用,为了方便之后我们可以使用yum安装软件,我们需要对yum做一些改动。在/usr/bin目录找到yum文件,将文件中#!/usr/bin/python改为#!/usr/bin/python_old
- 我们将python3安装在了自定义的位置,这样会导致之后通过pip安装的插件不能直接使用命令,所以需要将python目录下的bin目录加入到环境变量中,修改环境变量的方法,修改/etc下的profile文件,记得修改完后要source一下该文件使之马上生效
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/python3/bin #添加行
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
pathmunge /sbin after
pathmunge /usr/local/python3/bin after #添加行
fi
至此,我们的python升级就完成了,接下来进行下一步。
####第二步:安装爬虫Scrapy
1、准备工作,安装依赖。
Twisted,版本一定要大于等于13.1.0,我就是因为安装了低版本,导致不懂如何升级到高版本重新重置了系统。(血泪教训,之前安装的又得从头再来,好在使用的时京东云服务,重置系统比较方便。),这个高版本需要手动下载,yum中存在的好像时8点几的版本,比较老了。
2、安装爬虫
[root@jdu4e00u53f7 soft]# pip install scrapy
安装的过程中会有很多依赖需要安装,静静等待就好。
3、安装所需的模块(自己项目中使用到的,记录方便自己查阅)
安装scrapy_djangoitem
安装BeautifulSoup4
####第三步:Django安装
django不同版本对python的支持是不一样的,例如Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6
其他版本请查阅官网。
直接通过pip进行安装,我们在django后面跟上版本就可以安装指定的版本。
[root@jdu4e00u53f7 soft]# pip install django==1.11.4
安装所需的模块(自己项目中使用到的,记录方便自己查阅)
安装pymysql,一个连接mysql的驱动
安装requests
安装simplejson
安装apscheduler 一个可以实现异步定时任务
####第四步:安装mysql
如果不是要安装指定的mysql版本,可以使用yum来安装,方便快捷。
1、安装客户端和服务端
1)确认是否安装了mysql
[root@jdu4e00u53f7 soft]# yum list installed mysql*
2)安装客户端
[root@jdu4e00u53f7 soft]# yum install mysql
3)安装服务端
[root@jdu4e00u53f7 soft]# yum install mysql-server
[root@jdu4e00u53f7 soft]# yum install mysql-devel
2、修改配置文件,改变编码为utf-8
在/etc目录下找到my.cnf,将该文件修改如下(加粗字体为新增内容):
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-character-set=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
default-character-set=utf8
3、启动msql
[root@jdu4e00u53f7 soft]# service mysqld start
4、设置开机启动
[root@jdu4e00u53f7 soft]# chkconfig --add mysqld
[root@jdu4e00u53f7 soft]# chkconfig mysqld on
5、允许远程访问设置
mysql> update user set `Host` = '%' where `User` = 'root' limit 1;
6、mysql的几个重要目录(使用yum安装的默认目录)
- 数据库目录 /var/lib/mysql/
- 配置文件 /usr/share/mysql(mysql.server命令及配置文件)
- 相关命令 /usr/bin(mysqladmin mysqldump等命令)
- 启动脚本 /etc/rc.d/init.d/(启动脚本文件mysql的目录)