CentOS下python3以及scrapy环境搭建的注意事项

之前使用scrapy,环境一直是自己的笔记本,但以后要使用分布式爬虫,所以linux下的环境也必须要搭建一遍。这里记录一下自己走过的坑。

centos系统默认安装的是python2.X,用 python -V 指令查看。

但是python3一定是趋势,不可避免的要使用这个版本的,而且我scrapy也是用python3编写的。

在搭建环境的时候,走过不少坑,这里记录下来。

主机使用的阿里云,centos版本号是7.3.1611,默认python2.7.5。由于我笔记本一直用的python3.6.4,所以打算所有主机都一致,以免出现不愉快的错误。

1.首先下载3.6.4版本的安装包

wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

2.解压

tar -xzvf Python-3.6.4.tgz

3.进入解压好的安装包路径

cd Python-3.6.4

4.编译安装包,指定安装路径
    注意:prefix参数用于指定将Python安装在新目录,防止覆盖系统默认安装的python

./configure --prefix=/usr/local/python36

make && make install

5.建立软连接(软连接可以理解为windows的快捷方式)

ln -s /usr/local/python36/bin/python3.6 /usr/bin/python3

这样python3就安装完了。直接运行python3就可以用python3了。

我曾经有过这样的想法,反正我不用python2.X,我直接软连接到python不可以么,这样我直接运行python,就可以用3了,少敲一个数字多好,网上也有这种办法。但是,这是不可取的!强烈不建议。因为centos默认是python2,那么不可以避免的很多东西都是依赖于python2的,比如yum。

我们可以用readlink获取一个软链接指向的目的路径。当一个软链接指向的是一个另外的软链接,而另外一个软链接又指向其他的目标。  这时可以使用-f选项直接获取最终的非软链接的目标。

如果我们把python指向的地址修改成了我们的python3,那么你又要修改一些东西了,可能还会出现其它错误。因为很多东西的文件头是这样的  #!/usr/bin/python ,你必须修改成这样 #!/usr/bin/python2  ,因为python 已经指向python 3了。曾经我改掉了python的软连接,很多东西报错,按网上的方法修改了很多文件,但还是报错,导致我彻底卸载python和yum,又重新安装,最终还是重做了系统,很烦心。所以,系统的东西就让他留着吧,别轻易改他。

此时,我们运行python3,输入 import ssl 回车,此时,应该会报错。如果没有最好,我的另外一个主机就没有,可能是因为装了宝塔面板,都帮我搞定了。遇到这种情况,退出python3 ,运行pthon ,同样输入 import ssl ,会发现没有报错。(如果也报错就另当别论)这说明了我们是安装了openssl的,只不过pyhon3没有找到而已。现在,我们要进入到python源码包解压后的那个目录下的Modules/Setup,将下面四行代码取消注释,重新 make &&make install

但此时又报了一个错误 找不到openssl/rsa 这个文件,执行 yum install openssl-devel 解决问题(我另外一台电脑是deepin,指令为 apt-get install libssl-dev ,Ubuntu,Debian应该一致),重新 make &&make install。完成之后就可以导入ssl了。

现在我们继续尝试import sqlite3,如果报错,检查自己有没有安装sqlite-devel,没有的话yum -y install sqlite-devel

然后还是在Python源码目录里面,命令行输入./configure,再一次make && make  install ,这样就可以基本解决问题了,若还不行,自习百度吧。

接着,我们开始安装scrapy的环境,常用的包管理工具有pip ,系统是有默认装好的

查看,可以发现是python2.7的,那么python3 怎么安装pip,两个版本的都有pip,我怎么知道是在用哪一个pip呢?其实很简单。首先我们安装python3的时候,已经给我们自动装好了pip,运行 python3 -m pip -V  查看版本。

当然,每次运行python3的pip都要写那么长的指令是不友好的,建议为pip建立软连接,

ln -s /usr/local/python36/bin/pip3 /usr/bin/pip3

使用

pip3 -V

查看是否成功建立,如果成功,以后只需要执行pip3 install ..... 就可以了。


最后安装scrapy。

pip3 install scrapy#or  python3 -m pip install scrapy

安装过程中可能会出现找不到Twisted的错误,安装此依赖即可,如下。

wget https://twistedmatrix.com/Releases/Twisted/17.1/Twisted-17.1.0.tar.bz2
tar -jxvf Twisted-17.1.0.tar.bz2
cd Twisted-17.1.0
python3 setup.py install

解压可能会遇到如下错误

tar (child): lbzip2: Cannot exec: No such file or directory 
tar (child): Error is not recoverable: exiting now 
tar: Child returned status 2 
tar: Error is not recoverable: exiting now

是因为还没有安装bzip2,通过 yum -y install bzip2 命令安装一下就好了 。

剩下一些需要使用到的库

pip3 install pycryptodome
pip3 install pymysql
pip3 install scrapy_redis