Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Python3.3 + mod_wsgi3.4 をさくらVPS(CentOS)にインストールした時に少しハマったので振り返りメモ

前置き

最初のpython3.3インストール時にはこんな感じ↓(どこかのサイトを参照。)

$ ./configure --prefix=/usr/local
$ make
$ make altinstall

この環境にvirtualenv入れてpyramidのプロジェクト作ってみていたので、デプロイ用にapache+mod_wsgiを改めて構築しようとしたのが今回の取っ掛かり。

python3.3を再ビルドしないとダメっぽいので……

とりあえずpython3.3に追加パラメータをつけてコンパイルし直す

$ cd /path/to/Python-3.3.0
$ ./configure CFLAGS=-fPIC --enable-shared --prefix=/usr/local
$ make
$ make install
$ echo $?

ここまでは問題なかったように見えた…が、

$ python3.3
python3.3: error while loading shared libraries: libpython3.3m.so.1.0: cannot open shared object file: No such file or directory
$ 

あれ、soファイルが見つからないと言われる。
/usr/local/lib内に確かにあったので、今回は/etc/ld.so.confにパスと追加してldconfigで逃げ切り。

で、続けてmod_wsgiを何も考えずにインストールしようとする……も

$ wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
$ tar zxvf mod_wsgi-3.4.tar.gz
$ cd mod_wsgi-3.4
$ ./configure CFLAGS=-fPIC --with-python=/usr/local/bin/python3.3
$ make
(中略)
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_wsgi.la  -rpath /usr/lib64/httpd/modules -module -avoid-version    mod_wsgi.lo -L/usr/local/lib -L/usr/local/lib/python3.3/config -lpython3.3 -lpthread -ldl -lutil -lm
/usr/bin/ld: cannot find -lpython3.3
collect2: ld returned 1 exit status
apxs:Error: Command failed with rc=65536
.
make: *** [mod_wsgi.la] Error 1
$

想定していないエラーが出て止まってしまった。
pythonの再インストール後のファイル状況がどうなっているかを確認してみた。

$ ls -lt /usr/local/lib/python3.3/
(略)
drwxr-xr-x  4 root root   4096 Feb  3 23:57 concurrent
drwxr-xr-x  2 root root   4096 Feb  3 23:57 config-3.3m
-rw-r--r--  1 root root  49499 Feb  3 23:57 configparser.py
(略)

ビルドが特殊だったのかはひとまず置いといて、どうやら/usr/local/lib/python3.3/configではなく、/usr/local/lib/python3.3/config-3.3mという形でディレクトリが作られるらしい。
で、次

$ ls -lt /usr/local/bin/
(略)
lrwxrwxrwx 1 root root      16 Feb  3 23:57 python3-config -> python3.3-config
lrwxrwxrwx 1 root root      17 Feb  3 23:57 python3.3-config -> python3.3m-config
lrwxrwxrwx 1 root root       9 Feb  3 23:57 python3 -> python3.3
-rwxr-xr-x 1 root root    1970 Feb  3 23:57 python3.3m-config
(略)
-rwxr-xr-x 2 root root   13347 Feb  3 23:57 python3.3
-rwxr-xr-x 2 root root   13347 Feb  3 23:57 python3.3m
(略)

python3.3とpython3.3mが存在したり-configが最終的にpython3.3m-configを見てたりしていたので、-lpython3.3の指定がまずいんじゃないかと類推。
で、最終的にこんな感じにconfigure時に生成されるMakefileを書き換えてみることに

< LDFLAGS =  -L/usr/local/lib -L/usr/local/lib/python3.3/config 
< LDLIBS =  -lpython3.3 -lpthread -ldl  -lutil -lm
---
> LDFLAGS =  -L/usr/local/lib -L/usr/local/lib/python3.3/config-3.3m
> LDLIBS =  -lpython3.3m -lpthread -ldl  -lutil -lm
$ make
(略)
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_wsgi.la  -rpath /usr/lib64/httpd/modules -module -avoid-version    mod_wsgi.lo -L/usr/local/lib -L/usr/local/lib/python3.3/config-3.3m -lpython3.3m -lpthread -ldl -lutil -lm
$ 
$ make install

あ、makeが正常終了した。ので上ではそのままinstall。apacheの再起動も問題なくできた。

補足

まだ、mod_wsgiがうまく動くかの確認はしてないです

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
15
Help us understand the problem. What are the problem?