背景

今天有个任务,要跑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
更新完成之后,就可安装pipyum -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 环境中。

最后修改:2023 年 09 月 11 日
如果觉得我的文章对你有用,请随意赞赏