centos5.8 python 2をアップグレードする.4.3からpython 2.7.8

11638 ワード

メモ:
yum -y groupinstall 'Development Tools'yum -y install openssl-devel* ncurses-devel* zlib*.x86_64yum -y install bzip2 bzip2-devel bzip2-libs
yum -y install sqlite-devel
python 2.7.8のtarをダウンロードgzファイル
./configure --prefix=/usr/local/python && make && make installrm/usr/bin/pythonln -s/usr/local/python/bin/python2.7/usr/bin/python
$python-Vの検証
yumの失効の問題を解決する
 # vim/usr/bin/yum #!/usr/bin/pythonを#!/usr/bin/python2.4
-------------------------------
最初にインストールしたpython 2.7.3、インストールに成功した後、djangoを実行中にエラーが発生しました.
ImportError: No module named _sqlite3
ネット上の一般的な解決策に従います.
yum install sqlite-devel
python 2を再インストールしました.7.3、役に立たない--prefix
しかし、この問題は依然として解決されず、python-2.7.3/lib/python 2が見つからなかった.7/lib-dynload/_sqlite3.so.
個人的にはpython 2.7.3のバージョンの問題だと思います.
python 2がインストールする.7.8、依然としてこの問題を解決していないが、python-2.7.8/lib/python 2が存在する.7/lib-dynload/_sqlite3.so.
検証、import sys
         print sys.path
参照されるパスがすべて/usr/local/libの下のパスであることを見て、/usr/local/libの下にpythonがある場合、システムは自動的にこのpythonを使用し、あなた--prefixがインストールしたディレクトリのpythonを使用しません.ソフト接続を確立してpython-Vを実行するのはあなたの望む結果ですが.
/usr/local/の下に以前インストールされていたpythonをすべて削除した後、import sqlite 3は正常に動作します.
setuptoolsのインストール
setuptoolsもpipもpythonのモジュールです
setuptools   : https://pypi.python.org/pypi/setuptools
pip   : https://pypi.python.org/pypi/pip#downloads

setuptoolsをインストールし、setuptoolsのソースコードルートディレクトリの下に入り、setuptoolsモジュールのインストールを行うには、次のコマンドを実行します.
# python setup.py install

setuptoolsをインストールした後、pipをインストールし、pipのソースパッケージルートディレクトリの下に入り、以下のコマンドを実行してインストールします.
# python setup.py build  
# python setup.py install

pipをインストール後.pipがどこにインストールされているか見てみましょう.次のコマンドを実行します.
# whereis pip

次に#pipコマンドを実行し、車に戻ります.pipコマンドが使用できない場合は、pipソフトリンクを作成して、次のコマンドを実行できます.
# ln -s /usr/local/python/bin/pip /usr/bin/pip

pipのソフト接続を使用しない場合は、pipのパスを使用します.
# /usr/local/python/bin/pip

tornadoのインストール
tornado     :http://www.tornadoweb.org/en/stable/

tornadoのソースコードルートディレクトリに入り、setuptoolsモジュールのインストールを行うには、次のコマンドを実行します.
# python setup.py build  
# python setup.py install

djangoのインストール
django     :https://www.djangoproject.com/

djangoのソースコードルートディレクトリに入り、コマンドを実行してdjangoインストールを行います.
# python setup.py build  
# python setup.py install

jinja 2とsqlalchemyのインストール
pip install jinja2
pip install sqlalchemy

paramikoのインストール
pip install paramiko
    :
Installing collected packages: ecdsa, pycrypto, paramiko
  Running setup.py install for pycrypto
Successfully installed ecdsa-0.13 paramiko-1.15.2 pycrypto-2.6.1
     pip            ,    pycrypto paramiko
         (   paramiko    python2.7.8      ,        )

xlrd xlwtのインストール(excelを1つ読みexcelを1つ書きexcelを1つ)
pip install xlwt
pip install xlrd
  xlwt        ascii  ,      utf-8  ,          xlwt      :
 xlwt/Workbook  55       ,         Workbook      :
/usr/local/python/lib/python2.7/site-packages/xlwt/Workbook.py
   
def __init__(self, encoding='ascii', style_compression=0):
   
def __init__(self, encoding='utf-8', style_compression=0):
      xlwt     

mysql-pythonのインストール
pip install MySQL-python

インストールPillow(グラフィック処理、プロジェクトは検証コードを生成するために使用され、以下にコードがあります)
pip install Pillow

mysqlデータベースの符号化はutf-8に設定されています
          
CREATE DATABASE `rmdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

my.conf       
[mysqld]
            datadir=/var/lib/mysql
            socket=/var/lib/mysql/mysql.sock
            default-character-set=utf8
            user=mysql
            symbolic-links=0
        [mysqld_safe]
            log-error=/var/log/mysqld.log
            pid-file=/var/run/mysqld/mysqld.pid
        [client]
            default-character-set=utf8
        [mysql]   
            default-character-set=utf8 
        [server]   
            default-character-set=utf8 
          (tornado  )
create_engine("mysql://dusername:dpasswd@localhost/dbname?charset=utf8",encoding='utf-8')

Pillow生成検証コードのコード例(4ビット)
#!/usr/bin/python
#fileencoding:utf-8
from PIL import ImageDraw,ImageFont,ImageFilter
from PIL import Image 
import random
import math, string
import os
BASE_DIR = os.path.dirname(__file__)
print BASE_DIR
rootDir = BASE_DIR[0:-15]
fontPath = rootDir+"wqy-zenhei.ttc"
FONT_PATH = fontPath

def initChars():
    """
           ,       、     
    usage: initChars()
    param: None
    return: list
             
    for: picChecker       
    todo: Nothi
    """
    nums = [str(i) for i in range(10)]
    letter = "abcdefghijklmnopqrstuvwxyz"
    lowerCase = [x for x in letter]
    upperCase = [x.upper() for x in lowerCase]
    return (nums + lowerCase + upperCase)

class picChecker():
    """
          :
    1)             ,        
    2)           4  (        ,      )。
                          ,
               (            )
    usage: pc = picChecker().createChecker()
    param:   ,  
    chars        ,
       list
        initChars()
       ['1','2','3']
    length      
       integer
        4
    size     
       tutle
        (120,30)
       (120,30)
    fontsize     
       integer
        25
    begin       ,      
       tutle
        (5,-2)
    outputType     
       string
        GIF
        GIF JPEG TIFF PNG
    mode     
       string
        RGB L (      ,     2 )
        RGB
    backgroundColor    
    foregroundColor    
     mode=RGB ,backgroundColor,foregroundColor tutle  
       (integer,integer,integer)
      RGB   
     mode=L ,backgroundColor,foregroundColor   ,      
       0-255
        
    fonttype     
       string
        "simsum.ttc"
    jamNum      
       (int1,int1)
    int1        ,  
    int2        ,  
    pointBorder     
        :                          
       (int1,int2)
    int1       
    int2       
    return: [picCheckerStr,pic]
    picCheckerStr:              ,   session        
    pic :      ,   Image
    for :
    todo : Nothing
    """
    def __init__(self, chars = initChars(),
            size = (120, 35), fontsize = 25,
            begin = (5, -2), outputType = 'GIF',
            mode = 'RGB', backgroundColor = (255, 255, 255),
            foregroundColor = (0, 0, 255),
            fonttype = FONT_PATH, length = 4, jamNum = (1, 2),
            pointBorder = (40, 39)
            ):
        self.chars = chars
        self.size = size
        self.begin = begin
        self.length = length
        self.outputType = outputType
        self.fontsize = fontsize
        self.mode = mode
        self.backgroundColor = backgroundColor
        self.foregroundColor = foregroundColor
        self.jamNum = jamNum
        self.pointBorder = pointBorder
        self.fonttype = fonttype
        #self.font = ImageFont.truetype(self.fonttype, self.fontsize)
        self.font = ImageFont.truetype(FONT_PATH, self.fontsize)


    def createPoints(self, draw):
        """
        usage:       
        para: draw     
        return: None
        for:
        todo:
        """
        for x in range(self.size[0]):
            for y in range(self.size[1]):
                flag = random.randint(0, self.pointBorder[0])
                if flag > self.pointBorder[1]:
                    draw.point((x, y), fill = (0, 0, 0))
                del flag

    def createJam(self, draw):
        """
        usage:      
        para: draw     
        return: None
        for:
        todo:
        """
        lineNum = random.randint(self.jamNum[0], self.jamNum[1])
        for i in range(lineNum):
            begin = (random.randint(0, self.size[0]),
                    random.randint(0, self.size[1])
                    )
            end = (random.randint(0, self.size[0]),
                    random.randint(0, self.size[1])
                    )
            draw.line([begin, end], fill = (0, 0, 0))


    def getPicString(self):
        """
        usage: getPicString()
        return: string
        for :             
        todo: Nothing
        """
        length = self.length
        chars = self.chars
        selectedChars = random.sample(chars, length)
        charsToStr = string.join(selectedChars, '')
        return charsToStr

    def createChecker(self):
        """
        usage: createChecker()
        return: [str,pic]
        str:      
        pic:     
        for:
        todo:
        """
        randStr = self.getPicString()
        randStr1 = string.join([i + " " for i in randStr], '')
        im = Image.new(self.mode, self.size, self.backgroundColor)
        draw = ImageDraw.Draw(im)
        draw.text(self.begin, randStr1, font = self.font,
               fill = self.foregroundColor )
        self.createJam(draw)
        self.createPoints(draw)
        para = [1 - float(random.randint(1, 2))/100,
               0,
               0,
               0,
               1 - float(random.randint(1, 10))/100,
               float(random.randint(1, 2))/500,
               0.001,
               float(random.randint(1, 2))/500
                ]
        im = im.transform(im.size, Image.PERSPECTIVE, para)
        im = im.filter(ImageFilter.EDGE_ENHANCE_MORE)
        im.save("checker.jpg", self.outputType)
        return ([randStr, im])
if __name__ == "__main__":
    c = picChecker()
    t = c.createChecker()
    print(t)

自分のプログラムの中でログインして認証コードを持ってログインページに現れます
@route('getRandomCode', name='')
class GetRandomCodeHandler(BaseHandler):
    def get(self):
        c = picChecker()
        t = c.createChecker()
        sio=StringIO.StringIO()
        #wsServer.col(0).width = 7000
        _id = self.get_secure_cookie("session_id")
        if not _id:
            _id = session_id()
            self.set_secure_cookie("session_id", _id)
            sessionForRandomCodeOld = self.db.query(SessionForRandomCode).filter_by(session_id=_id).first()
            if not sessionForRandomCodeOld:
                localTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
                sessionForRandomCode = SessionForRandomCode(random_code=t[0],start_date=localTime,session_id=_id)
                self.db.add(sessionForRandomCode)
                self.db.commit()
            else:
                sessionForRandomCodeOld.random_code=t[0]
                self.db.commit()
        else:
            sessionForRandomCodeOld = self.db.query(SessionForRandomCode).filter_by(session_id=_id).first()
            if not sessionForRandomCodeOld:
                localTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
                sessionForRandomCode = SessionForRandomCode(random_code=t[0],start_date=localTime,session_id=_id)
                self.db.add(sessionForRandomCode)
                self.db.commit()
            else:
                sessionForRandomCodeOld.random_code=t[0]
                self.db.commit()
        t[1].save(sio,'jpeg')
        self.write(sio.getvalue())