Python 3.1 をインストールする
Python 3.1 がリリースされたね(*'ω')b
ってことで Gentoo Linux にインストールします.
さすがにまだ Portage にはきていないと思うので,今回は自前でコンパイルします.
まずは,Python 3.1 Releaseから Bzipped source tar ball (3.1) っていうのを適当なところにダウンロードして保存します.
それから,
% tar -jxvf Python-3.1.tar.bz2 % cd Python-3.1 % ./configure % make ... running build running build_ext Traceback (most recent call last): File "./setup.py", line 1675, in <module> main() File "./setup.py", line 1670, in main "Tools/scripts/2to3"] File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/core.py", line 149, in setup dist.run_commands() File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/dist.py", line 919, in run_commands self.run_command(cmd) File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/dist.py", line 938, in run_command cmd_obj.run() File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/command/build.py", line 128, in run self.run_command(cmd_name) File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/cmd.py", line 315, in run_command self.distribution.run_command(command) File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/dist.py", line 938, in run_command cmd_obj.run() File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/command/build_ext.py", line 347, in run self.build_extensions() File "./setup.py", line 102, in build_extensions missing = self.detect_modules() File "./setup.py", line 728, in detect_modules f = open(f).read() File "/home/keisuke/Work/Build/Python-3.1/Lib/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 922: ordinal not in range(128) make: *** [sharedmods] エラー 1
うわっ!!コンパイル通らない (?_?)
File "./setup.py", line 728, in detect_modules f = open(f).read()
どうも,ここが怪しそう.
codec エラーで文字列扱ってるのがここくらいだからです.
で,当の場所はというと,
for d in inc_dirs + db_inc_paths: f = os.path.join(d, "db.h") if db_setup_debug: print("db: looking for db.h in", f) if os.path.exists(f): f = open(f).read()
どうやら db.h っていうファイルが悪さしてるらしい.
けど,Python-3.1 の中には無いみたい.
ちょうどデバッグ出力のコードが用意されてるので,ここのif文にちょっと消えてもらって,出力させてみる.
running build running build_ext db: looking for db.h in ./db.h db: looking for db.h in ./Include/db.h db: looking for db.h in /usr/local/include/db.h db: looking for db.h in Include/db.h db: looking for db.h in /home/keisuke/Work/Build/Python-3.1/db.h db: looking for db.h in /usr/include/db.h Traceback (most recent call last): File "./setup.py", line 1676, in <module> main() File "./setup.py", line 1671, in main "Tools/scripts/2to3"] File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/core.py", line 149, in setup dist.run_commands() File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/dist.py", line 919, in run_commands self.run_command(cmd) File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/dist.py", line 938, in run_command cmd_obj.run() File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/command/build.py", line 128, in run self.run_command(cmd_name) File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/cmd.py", line 315, in run_command self.distribution.run_command(command) File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/dist.py", line 938, in run_command cmd_obj.run() File "/home/keisuke/Work/Build/Python-3.1/Lib/distutils/command/build_ext.py", line 347, in run self.build_extensions() File "./setup.py", line 102, in build_extensions missing = self.detect_modules() File "./setup.py", line 729, in detect_modules f = open(f).read() File "/home/keisuke/Work/Build/Python-3.1/Lib/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 922: ordinal not in range(128) make: *** [sharedmods] エラー 1
ほうほう! /usr/include/db.h の 922 バイト目が悪さをしてるらしい!!
じゃあ,見てよう!!
/* * Berkeley DB version information. */ #define DB_VERSION_MAJOR 4 #define DB_VERSION_MINOR 6 #define DB_VERSION_PATCH 21 #define DB_VERSION_STRING "Berkeley DB 4.6.21: (6月 7, 2009)"
あ,漢字発見.
これは codec のエラーにもなるって話ですね.
じゃあ仕方がないので,./setup.py
の line 728 で,codec エラーになるようなデータがきたら無視するように変更する.
for d in inc_dirs + db_inc_paths: f = os.path.join(d, "db.h") if db_setup_debug: print("db: looking for db.h in", f) if os.path.exists(f): f = open(f, errors='ignore').read()
これで make
したらちゃんと通った(*'ω')b
最後にインストールしておしましい( ´ー`) =3
% sudo make install