Windows で tar ファイルを展開する法 [プログラム三昧]
先日, python-twitter というモジュールを Windows で使っている Python に入れようと思い立ちました. python-twitter は, http://code.google.com/p/python-twitter/ で配布されている, Python で Twitter API を使用するためのラッパーライブラリです.
tar ファイルを展開せよ
このページの中に,インストール手順が記述されています.
- simplejson をインストールする
simplejson は,私が使っている Python 2.6 には,インストールされているらしいので,OK.
- ライブラリファイルをダウンロードする
リストに並んでいる, python-twitter-0.6-tar.gz をダウンロードしました.
- untar して, build, install で,出来上がり
"untar" ですか? ZIP なら, Windows でも展開できますが.
というわけで, Windows で, ".tar.gz" ファイルを展開する必要ができてしまいました.
ご存じない方のために : ".tar.gz" ファイルとは何ぞや
UNIX の世界では,ディレクトリを丸ごとオープンリールの1/2インチテープに保存して,流通させている時代がありました.そのため,ディレクトリをシーケンシャル・ファイルに書き込むコマンドが用意されていました.それが, tar (tape archives) コマンドです. tar コマンドによって作られたファイルには,慣例として .tar というサフィックスが付けられており,アーカイブすること自体を tar と呼んでいます.
逆に,アーカイブ・ファイルからディレクトリを再構築する場合にも tar コマンドが使用されます.この工程のことを untar と呼んでいます.
tar されたアーカイブ・ファイルは,ディレクトリを丸ごと保存したものなので,巨大なファイルになりがちです.ファイルの大きさは,そのままテープの量に影響するので,流通させるためには,なるべく,サイズの小さなアーカイブ・ファイルに圧縮する必要があります.この圧縮の工程を行うのが, gzip というコマンドで,圧縮されたファイルには, .gz というサフィックスが付けられます.
このように, tar して gzip した状態のファイルに付けられたサフィックスが, ".tar.gz" というわけです.このファイルを展開するときには, gunzip というコマンドで,圧縮前のファイルに戻してから, untar します.
ちなみに,オープンリールテープを流通させていた時代には, compress という圧縮コマンドが使用されており,サフィックスとして, .Z が使用されていました.その時代のライブラリには, ".tar.Z" というサフィックスが良く使われていました.
横着して, untar するには
もちろん, Windows 向けの "gzip" と "tar" を探してきて,インストールすれば,ライブラリを展開することができます.でも,めんどくせ~.他に楽な方法は無いかな?
と,考えていて,ピンときました. Python 自身が, tar ファイルを展開する機能を持っていないかな?調べてみたら,やっぱり,ありましたよ. "tarfile" という名前のライブラリです.マニュアルによると, gzip で圧縮されたファイルもそのまま使えるらしい.これを使って, Python からコマンドを打ち込んで,展開しちゃいましょう.
Python で, .tar.gz を展開する
展開作業をおこなう場所を "C:\Temp"
にしました.まず,このディレクトリに,ライブラリ・ファイルを配置します.そして, Python を起動し,カレントディレクトリを移動します.
PythonWin 2.6.4 (r264:75706, Nov 3 2009, 13:23:17) [MSC v.1500 32 bit (Intel)] on win32. Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information. >>> import os >>> os.chdir("C:/Temp")
次に, untar します.
>>> import tarfile >>> tf=tarfile.open("python-twitter-0.6.tar.gz") >>> tf.extractall()
以上で,展開終了です.サフィックスから判断して,適切に扱ってくれました.
参考文献
この本によると, tarfile.TarFile.open() を使うと書かれていますが,オンラインマニュアルによると, tarfile.open() の方が推奨されています.おそらく, Python のバージョンの違いによるものだと思われます.
コメント 0