背景
今天有个任务,要跑Python脚本爬数据,但是这个脚本是用 Python3 写的,我服务器上 Python 是默认的 Python2.7.5,所以跑起来一堆问题,这个时候就需要配置 Python3 环境了,你要问我为什么要 Python2 和 Python3 共存,而不是只保留其中一个? 因为由于很多基本的命令、软件包都依赖旧版本,比如:yum。所以在更新 Python时,建议不要删除旧版本(新旧版本可以共存)。
安装
下载
进入Python下载页面,选择需要的版本。这里,我选择的版本是3.7.1。
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
解压
tar -zxvf Python-3.7.1.tgz
安装配置
cd Python-3.7.1/
./configure
如果运行./configure 报错,有可能是没有安装依赖:yum install make gcc gcc-c++
安装完成后,重新执行
编译&安装
make && make install
验证
[root@host ~]# python -V
Python 2.7.5
[root@host ~]# python3 -V
Python 3.7.1
可以看到,Python2 和 Python3 都可以啦,想用2就是用 Python2、想用3就使用 Python3。接下来就是 pip 了。
Centos7下使用yum安装pip
首先安装epel扩展源:yum -y install epel-release
更新完成之后,就可安装pip:yum -y install python-pip
这个时候就可以查看pip 的版本了:pip -V
先是跑了下脚本,结果报各种组件没有,肯定要用 pip 安装一波呀!结果各种报错,网上各种谷歌解决报错的方法,后来终于是不报错了,但是安装了还是提示没有,一看pip -V 原来是 python2 的pip,这个时候就要安装 pip3 了,结果安装 pip3 疯狂报错:
python setup.py install
Traceback (most recent call last):
File "setup.py", line 6, in
from setuptools import setup, find_packages
File "/usr/local/lib/python3.4/site-packages/setuptools/__init__.py", line 11, in
from setuptools.extension import Extension
File "/usr/local/lib/python3.4/site-packages/setuptools/extension.py", line 8, in
from .dist import _get_unpatched
File "/usr/local/lib/python3.4/site-packages/setuptools/dist.py", line 18, in
from setuptools import windows_support
File "/usr/local/lib/python3.4/site-packages/setuptools/windows_support.py", line 2, in
import ctypes
File "/usr/local/lib/python3.4/ctypes/__init__.py", line 7, in
from _ctypes import Union, Structure, Array
ImportError: No module named '_ctypes'
搜了半天,网上硬是没有相关的解决方法,试了何种其它方案,都已失败告终,然后看了一波源码,可怜我的眼睛啊!!!要看瞎了。源码编译安装 Python3(.3.4之后),是自带且默认安装 pip、setuptools的,如果装完 Python 发现没有装这俩库,说明你的安装环境不全。重新 make一波源代码,就可以从中看出蹊跷:
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_dbm _gdbm _lzma
_sqlite3 _ssl _tkinter
readline zlib
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
模块的二进制文件没找到,你问这些二进制文件哪里有?找它们的官网啊!!!
wget http://zlib.net/zlib-1.2.8.tar.gz
还是老套路,下载、解压、配置、编译、安装再一次~
find / -name "zlib.h"
/usr/local/include/zlib.h
有了,然后再make Python3.7,发现
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_dbm _gdbm _lzma
_sqlite3 _ssl _tkinter
readline
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
zlib 装好了,还有那么多没装成的是什么鬼? 一把梭了,all in yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
这个时候重新 make && make install Python3.7之后,你就会发现pip3 出来啦!!!
[root@host ~]# pip2 -V
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
[root@host ~]# pip3 -V
pip 18.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
也可以直接下载安装,不用自带的安装,下载两个包,执行两条命令即可,很简单的。
a.首先安装setuptools
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26
tar -zxvf setuptools-19.6.tar.gz
cd setuptools-19.6.tar.gz
python3 setup.py build
python3 setup.py install
b.然后直接安装pip就搞定了。。
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb
tar -zxvf pip-8.0.2.tar.gz
cd pip-8.0.2
python3 setup.py build
python3 setup.py install
记得给你的 pip3 升级哟!pip3 install --upgrade pip
搞定,用 Python 跑脚本,缺了模块,就用 pip2 安装,用 Python3 跑脚本,就用 pip3 安装,就会安装到对应的 Python 环境中。
此处评论已关闭