CentOS6.8 升级python2.7

参考链接:https://ruiaylin.github.io/2014/12/12/python%20update/

前提:centos6.8虚拟机,新机器,很多包都没有

centos6.8自带python是2.6,项目需要python2.7


注意:

因为是新机器,所以os上很多依赖包都没有。我第一次参考链接的方式安装2.7,结果在执行python get-pip.py中报错:zipimport.ZipImportError: can't decompress data; zlib not available。查看了一些文档,都然并卵。必须执行下面的语句,python get-pip.py才能执行成功。(update应该可选,未亲测)

yum -y update

yum groupinstall -y 'development tools'

yum install -y zlib-devel bzip2-devel openssl-devel xz-libs wget

1.下载python2.7.9的包:

wget http://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz

xz -d Python-2.7.9.tar.xz

tar -xvf Python-2.7.9.tar

2.安装

cd Python-2.7.9

./configure --prefix=/usr/local/python2.7

(注:

./configure --prefix=/usr/local说明。不指定prefix,则可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其它的资源文件放在/usr /local/share。所以没有特殊要求,省略--prefix就可以了。你要卸载这个程序,要么在原来的make目录下用一次make uninstall(前提是make文件指定过uninstall),要么去上述目录里面把相关的文件一个个手工删掉。

指定prefix,直接删掉一个文件夹就够了)

make && make install

3.修改/usr/bin/python软连,指向python2.7

ln -sf /usr/local/python2.7/bin/python2.7 /usr/bin/python

测试:

# python

Python 2.7.9 (default, Mar 29 2017, 14:50:12)

[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> exit()

成功。

/usr/local/php5/sbin/php-fpm --prefix /usr/local/php5 --fpm-config /usr/local/php5/etc/php-fpm.conf --pid /Users/liuh/development/temp/cmdb_session/php-fpm.pid

/usr/sbin/php-fpm --prefix /usr --fpm-config /etc/php-fpm.conf

4.安装pip

cd {workdir}

wget https://bootstrap.pypa.io/get-pip.pypython get-pip.py(我总觉得上面这句话很重要,这个pip是安装在python2.7下面的,一切使用pip安装的包都是在python2.7下)

测试:

# pip --version

Could not find platform independent libraries

Could not find platform dependent libraries

Consider setting $PYTHONHOME to[:]

ImportError: No module named site

因为在编译python时指定了--prefix,所以python home不再是默认的/usr/local/,需要在/etc/profile末尾指明一下:

export PYTHONHOME=/usr/local/python2.7

退出保存,使生效:source /etc/profile

# pip --version

pip 9.0.1 from /usr/local/python2.7/lib/python2.7/site-packages (python 2.7)

成功。

(pip安装的另一种方式:

pip安装也可以用yum完成:yum install -y python-pip,但有可能会报错:No package python-pip available.

可能是在已有的yum源中找不到这个名称的包,安装epel源:

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install -y python-pip

成功。)

5.centos6.8使用的yum命令是依赖于python2.6的,我们修改了/usr/bin/python的指向后,yum命令就不可用了,需要编辑:vi /usr/bin/yum

把第一行#!/usr/bin/python 改成 #!/usr/bin/python2.6

保存,退出。yum又可以愉快地玩耍了。

6.pip安装包时,官方地址是:http://pypi.python.org。因为各种原因,网速不规则卡顿,于是可以修改pip镜像地址:

http://cls1991.github.io/2015/11/29/pip%E4%BF%AE%E6%94%B9%E5%AE%98%E6%96%B9%E6%BA%90%E4%B8%BA%E8%B1%86%E7%93%A3%E6%BA%90/

或者直接这样使用命令:

https://www.douban.com/note/302711300/

pip使用技巧:

除了直接用命令:pip install {package_name}以外

1)也可以将要安装的包,先下载到某个目录{pkg_dir},然后指定pip包的安装来源:pip install --no-index --find-links={pkg_dir}

2)一个python项目中可以创建一个requirements.txt,里面指明项目所需各项的依赖,然后用pip安装:pip -r requirements.txt

3)我们可以多种方式下载:pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com -r requirements.txt

pip install --no-index --find-links={pkg_dir} -r requirements.txt

7.为了解决不同项目,依赖不同版本的python;或者兼有依赖同一版本,但所需要的包不相同的问题,我们需要用virtualenv来管理各个项目所用的python版本及依赖。

我们使用virtualenvwrapper(参考链接:https://virtualenvwrapper.readthedocs.io/en/latest/

pip install virtualenvwrapper

export WORKON_HOME=~/Envs

mkdir -p $WORKON_HOME

source /usr/local/bin/virtualenvwrapper.sh

# mkvirtualenv login

which: no virtualenv in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

ERROR: virtualenvwrapper could not find virtualenv in your path

还是因为我修改过python2.7的安装路径,所用virtualenv找不着了,把python2.7的bin添加到PATH,修改/etc/profile,在文末添加:

export PATH=$PATH:/usr/local/python2.7/bin

保存退出:source /etc/profile

再次:mkvirtualenv login成功。

切换到login环境:workon login, 报错:

Could not find platform independent librariesCould not find platform dependent librariesConsider setting $PYTHONHOME to[:]

ImportError: No module named site

查了半天原来是virtualenv没有正确指定需要使用的python,在/etc/profile末尾添加:

export VIRTUALENVWRAPPER_PYTHON=$PYTHONHOME/bin/python2.7

virtualenv的命令又可以愉快的玩耍了。

避免每次登陆都要初始化virtualenv的环境,增加以下变量在/etc/profile中

export WORKON_HOME=/home/Envs

source $PYTHONHOME/bin/virtualenvwrapper.sh

注意:不要在/etc/profile中添加上面的语句(source $PYTHONHOME/bin/virtualenvwrapper.sh),这会导致yum再次失效。

8.用uwsgi启动一个python django web项目

首先要在对应virtualenv下安装uwsgi,很简单:pip install uwsgi

其次,在项目模块下定义一个uwsgi.ini文件,文件内容如下:

[uwsgi]

http = 127.0.0.1:8000

pidfile2 = /home/login/login_uwsgi.pid

logto2 = /home/login/logs/login_uwsgi.log

logdate = true

log-format = [%(addr)] [%(ctime)] [%(method)] [%(uri)] [%(proto)] [%(status)] [%(msecs)] [%(referer)] [%(uagent)]

daemonize = /home/login/logs/start.log

memory-report = true

master = true

vacuum = true

chdir = /home/login/src

module = wsgi:application

env=BK_ENV=production

cheaper = 4

cheaper-initial = 4

workers = 8

cheaper-algo = busyness

cheaper-overload = 5

cheaper-step = 2

cheaper-busyness-multiplier = 60

buffer-size = 8192

post-buffering = 8192

max-requests = 1024

http:项目监听端口

pidfile2:进程启动生成的pid文件,进程kill后此文件会销毁

logto2:uwsgi请求日志

daemonize:uwsgi后台运行

使用启动脚本start.sh:

#!/bin/bash

LOGIN_HOME=/home/login

LOG_DIR=${LOGIN_HOME}/logs

PID_FILE=${LOGIN_HOME}/login_uwsgi.pid

PYTHON_HOME=/usr/local/python2.7/

VIRTUALENVWRAPPER_PYTHON=$PYTHONHOME/bin/python2.7

WORKON_HOME=/home/Envs

# check repeat start

if [ -f $PID_FILE ]

then

echo "$PID_FILE do exits.."

pid=`cat $PID_FILE`

if [ $pid ]

then

ps aux|awk '{print $2}'|grep $pid && echo "login program pid:[ $pid ] already running ..." && exit 0

echo "proccess pid:[ $pid ] does not exists, prepare to start login process .."

fi

fi

source $PYTHONHOME/bin/virtualenvwrapper.sh

workon login

uwsgi --ini ${LOGIN_HOME}/src/uwsgi.ini

echo "login proccess start success."

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容