GeoIP C APIのインストール

CentOS6.4

必要なツールのインストール
$sudo yum install automake autoconf libtool zlib-devel make

ソースファイル取得
$git clone https://github.com/maxmind/geoip-api-c

GeoLiteデータベース取得
$cd geoip-api-c/data
$wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$gzip -d GeoIP.data.gz

configurationスクリプト生成
$cd ../
$aclocal
$libtoolize
$automake -a
$autoreconf --force --install

インストール
$./configure --prefix=/opt/geoip --enable-shared
$make
$sudo make install

GeoLiteCityデータベース取得
$wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$gzip -d GeoLiteCity.dat.gz
$mv GeoLiteCity.dat /opt/geoip/share/GeoIP/

Python3の文字列(ユニコード)とバイト列

    文字列str(unicode(point))
decode↑ ↓encode
    バイト列bytes(utf-8, latin-1, cp932, etc...)

HOWTOに載ってるTips

“最も重要なTipsは
ソフトウェア内の処理ではUniucode文字列のみ使用すること、インプットデータを出来るだけ早くデコードすること、そして、アウトプット時のみエンコードを指定すること”

同じHOWTOに載ってるサンプル
入出力時のみエンコードにasciiを指定しています。
また、errorsでsurrogateescapeを指定してasciiでエラーが出た場合はUnicodeの代替用コードに置き換えられ、デコード時にはもとのバイト列に戻るようになっています。

#入力
with open(fname, 'r', encoding="ascii", errors="surrogateescape") as f:
    data = f.read()
 
#処理
# make changes to the string 'data'
 
#出力
with open(fname + '.new', 'w', encoding="ascii", errors="surrogateescape") as f:
    f.write(data)
#バイト列を返す場合
return data.encode(encoding="ascii", errors="surrogateescape")

Pythonのコンパイルに必要なパッケージ

Python 3.3.2

Package Debian CentOS
_bz2 libbz2-dev bzip2-devel
_curses(_curses_panel) libncurses5-dev bzip2-devel
_dbm(_gdbm) libgdbm-dev gdbm-devel
_lzma liblzma-dev xz-devel
_sqlite3 libsqlite3-dev sqlite-devel
_ssl libssl-dev openssl-devel
_tkinter tk-dev tk-devel
readline libreadline-dev readline-devel
zlib zlibc zlib-devel

#!/bin/bash
#For Debian
apt-get install libbz2-dev \
                     libncurses5-dev \
                     libgdbm-dev \
                     liblzma-dev \
                     libsqlite3-dev \
                     libssl-dev \
                     tk-dev \
                     libreadline-dev \
                     zlibc
#!/bin/bash
#For CentOS
yum install bzip2-devel \
                     ncurses-devel \
                     gdbm-devel \
                     xz-devel \
                     sqlite-devel \
                     openssl-devel \
                     tk-devel \
                     readline-devel \
                     zlib-devel

$./configure --prefix="/opt/python3/" --enable-shared
$make
$sudo make install

/etc/ld.so.conf.d/python3.conf
/opt/python3/lib

$sudo ldconfig