为何举例来讲这个安装过程呢, 由于如今的开发部署的主流linux就是CentOS,而大部分人目前所使用的版本是CentOS Linux release 7.4
该系统已经自带集成了 Python2.7版本及pip,若是没有也能够经过yum方式安装。而CentOS 6则自带Python2.6.6 且没有pip。而现行大多数的Python开源项目都要求Python在2.7及以上,因此若是你要部署项目的机器是CentOS 6, 则须要升级Python版本并安装pip。看起来就这点东西,可是在执行过程当中会遇到许多问题,接下来一步一步给你讲解,让你从根上理解Python多环境安装。css
针对pip的安装普通使用2中方式,一种是yum安装,一种是源码包安装,这个直接在百度搜索也能够搜到一大把有用的内容。这里2个系统都分别介绍一下node
若是你的机器上没有pip,能够执行以下命令python
yum -y install python-pip
复制代码
若是安装失败,根据提示解决对应问题,有的人可能须要先安装epel-releaselinux
yum -y install epel-release
yum -y install python-pip
复制代码
cd /opt/
wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
tar -xzvf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install
复制代码
这也是官方文档中说明的方法, 可是对于某些操做系统及Python版本会不成功
pip官方文档nginx
# 下载安装脚本
cd /opt/
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# 运行安装脚本
python get-pip.py
复制代码
注意:用哪一个版本的 Python 运行安装脚本,pip 就被关联到哪一个版本web
python3 get-pip.py # 运行安装脚本。pip关联到了python3
python2 get-pip.py # 运行安装脚本。pip关联到了python2
复制代码
在看下文以前,建议先观看==>只有理解了虚拟环境才算真正掌握 Python 环境sql
这里选用centos6来作讲解,会更有表明性,会有各类各样的问题发生,固然你也可能不会发生,这和你执行的顺序有关。编程
前文已经说过,centos6 默认自定了 Python2.6 版本,那么如今直接动手赚一个 Python2.7 的版原本作演示。 你问我为何不直接上Python3.7+,不为何,就是想搞事情(由于公司项目不支持python3,且必须是python2.7以上,后续升级3.7。)话很少说,看下面命令:bootstrap
# step 1
cd /opt/
wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 #下载python 版本包
tar -jxvf Python-2.7.3.tar.bz2 # 解压文件
# step 2
cd Python-2.7.3 # 进入文件夹
# 检查安装平台属性,系统是否有编译时所须要额库,以及库的版本是否知足编译须要
./configure
make all && make install && make clean && make distclean # 编译安装及清理
# step 3
mv /usr/bin/python /usr/bin/python2.6.6 # 移动备份原Python 指令
ln -s /usr/local/bin/python2.7 /usr/bin/python #设置Python bin命令的软链接指向
复制代码
此时输入Python -V
,会显示以下结果centos
[root@alpha-silvergrd-107-13 Python-2.7.3]# python -V
Python 2.7.3
复制代码
然而由于我只先实践了以后才来写文章的,因此有些命令我没执行, 为了后面方便演示,我说下我本机的状况, step 3中我执行的是ln -s /usr/local/bin/python2.7 /usr/bin/python2.7
,全部个人这样查看效果
这个地方须要我解释吗?各位看官问问身边的同事就好或者百度就行,就不赘述了。
若是已经先执行了上一个标题内容 #只想安装pip,那么你就有麻烦了,若是没有,那你就没什么大麻烦!!
由于你以前已经安装了pip, 而那个时候你系统的Python版本是2.6,因此pip被关联上了Python2.6, 此时若是你使用这个命令python2.7 -m pip install scrapy
,会报以下错误,这是由于Python2.7没有与之关联的匹配pip
python -m pip install scrapy
则不会
cd /opt/
cd pip-9.0.1
python2.7 setup.py install # pip关联到Python2.7上
复制代码
注意:用哪一个版本的 Python 运行安装脚本,pip 就被关联到哪一个版本
再次执行就没有此错误了
cd /opt/
wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
tar -xzvf pip-9.0.1.tar.gz
cd pip-9.0.1
# 2者选其一,看状况
python2.7 setup.py install(python setup.py install)
复制代码
如今多版本Python和pip 都已经安装好了,那么如何使用它来下载一个包呢?
这里以安装一个scrapy为例
python2.7 -m pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
# or
python -m pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
# python2.7: 使用的语言版本
# -m: 将模块看成脚本运行
# -i:使用镜像源
复制代码
由于不是边操做边写的文章,其实在执行的过程当中遇到了挺多错误的,可是这些错误我也不太记得是在哪些步骤发生的了,全部统一归类在这里,若是正好你遇到了,能够直接照着解决,centos6问题较多,centos7不会有这么多问题。
这里以centos6为例,由于问题多。
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
python2.7 ez_setup.py --insecure
复制代码
在./configure过程当中,若是没有加上–with-ssl参数时,默认安装的软件涉及到ssl的功能不可用,恰好pip过程须要ssl模块,而因为没有指定,因此该功能不可用。
解决办法是从新对python2.7.3进行编译安装,用如下过程来实现编译安装:
# 查看openssl安装包,发现缺乏openssl-devel包
rpm -aq|grep openssl-devel
# yum安装openssl-devel
yum install openssl-devel -y
# 查看安装结果
rpm -aq|grep openssl
# 从新对python2.7进行编译安装,用一下过程来实现编译安装
cd /opt/Python2.7.3
./configure --with-ssl #添加ssl选项
make all && make install && make clean && make distclean
复制代码
yum install sqlite-devel
cd /opt/Python2.7.3
./configure
make all && make install && make clean && make distclean
复制代码
vi /usr/bin/yum
复制代码
开头的第一行内容#!/usr/bin/python
使用了python,若是你的python版本变了,也就是python -V
不是最初的内容了,你须要把这个内容改成原先的python内容,好比
mv /usr/bin/python /usr/bin/python999
复制代码
那么#!/usr/bin/python
就要改成#!/usr/bin/python999
。 固然你也能够找匹配的当前python版本的yum源文件的内容过来替换,但不建议(麻烦)
参考:Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found
但不建议,这里对系统层面的改动比较大,若是是生产服务器,很难预估风险。
一般这种状况能够采用以下方式修复,从新下载系统原有的包进行安装修复
# 下载对应操做系统rpm包
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-2.6.6-66.el6_8.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-devel-2.6.6-66.el6_8.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-libs-2.6.6-66.el6_8.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-pycurl-7.19.0-9.el6.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-setuptools-0.6.10-4.el6_9.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-urlgrabber-3.9.1-11.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/rpm-python-4.8.0-59.el6.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-plugin-protectbase-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-plugin-aliases-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
wget http://mirrors.ustc.edu.cn/centos/6.10/os/x86_64/Packages/yum-utils-1.1.30-41.el6.noarch.rpm
# 安装(依赖报错的话缺什么下什么)
rpm -Uvh --replacepkgs rpm-python*.rpm
rpm -Uvh --replacepkgs yum*.rpm
# or
rpm -Uvh --replacepkgs yum*.rpm –force --nodeps
复制代码
yum install zlib
# 从新编译Python
./configure --with-zlib
make all && make install && make clean && make distclean
复制代码
pip install -U pip
pip install -U setuptools
pip install wheel
复制代码
有些内容没有细讲也有部分忘记了,可能每一个人遇到的问题也不一样,我挑了个遇到问题最多的来讲,上文中已经共存了Python2.6和Python2.7两个版本,那在这基础上再添加其余的Python版本也是一样的操做再来一遍,依次重复操做。惟一有变化的就是包下载的不一样。
那么若是你有疑问能够在底部留言评论,我会一一解答,顺便也回一下我在这个过程当中忘记了的事。
其实还可使用venv、conda来解决这类问题,可是不想依赖第三方工具,因此没研究,后续会补充这方面文章。
文章每周持续更新,能够微信搜索「 十分钟学编程 」第一时间阅读和催更,若是这个文章写得还不错,以为有点东西的话 ~求点赞👍 求关注❤️ 求分享❤️
各位的支持和承认,就是我创做的最大动力,咱们下篇文章见!