[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:02858] Re: Grail (or python-tk)



  はじめまして, 石川雅弘(Python 大好き)@DB研.筑波大 と申します. 

Sawada Hideaki <sawada@xxxxxxxxxxxx> writes:
> 澤田です。
> 
> kikutani said at Thu, 13 Nov 1997 16:44:15 +0900 :
> >/usr/lib/python1.4/tkinter/ 以下はできているので良さげではあるのですが。
> >単に python でインタープリタを起動して、>>> のプロンプトから手で
> >    import _tkinter
> >とか
> >    import tkinter
> >とかやってもエラーですか?
> 
> そのまま、転記します。
> ------------------------------------------------------------------
> $ python
> Python 1.4 (Mar  4 1997)  [GCC 2.7.2.1 Objective-C snapshot 960906]
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> >>> import _tkinter
> Traceback (innermost last):
>   File "<stdin>", line 1, in ?
> ImportError: File not found
> >>> import tkinter
> Traceback (innermost last):
>   File "<stdin>", line 1, in ?
> ImportError: No module named tkinter
> >>>
> ------------------------------------------------------------------
> 
> とりあえず、python-tk の問題のようですね。
> 
> /usr/lib/python1.4/tkinter/ 以下ですが
> ------------------------------------------------------------------
> $ ls /usr/lib/python1.4/tkinter/
> Canvas.py         FileDialog.py     SimpleDialog.py   Tkinter.py
> Canvas.pyc        FileDialog.pyc    SimpleDialog.pyc  Tkinter.pyc
> Dialog.py         ScrolledText.py   Tkconstants.py
> Dialog.pyc        ScrolledText.pyc  Tkconstants.pyc
> ------------------------------------------------------------------
> です。

Python にはモジュール機構があり, さまざまな機能が標準あるいは拡張モ
ジュールとして提供されています. tk へのインターフェイスも Tkinter と
いう拡張モジュールとして提供されています (Tkinter は Python で記述さ
れた部分, _tkinter がさらにその中から import されて実際に tk の C ラ
イブラリとインターフェイスを取る C で記述されたモジュールです.
tkinter という 名前は obsoete だったと思います).

モジュールを利用する(モジュールを参照する)にはまずモジュールを
import する必要があるのですが, import 命令は sys.path という変数に設
定されたパスのみ検索します(丁度 Emacs の load-path に相当します). つ
まり例えモジュールファイルがインストールされていても, そのパスが
sys.path に含まれていなければ python はモジュールを import すること
ができません.

sys.path のデフォルトは Python のコアインタプリタの作成時に明示的に
指定され, 実行ファイルに焼き込まれます. 私の場合は

	>>> sys.path
	['', '/usr/local/lib/python1.4', '/usr/local/lib/python1.4/test', '/usr/local/lib/python1.4/linux2', '/usr/local/lib/python1.4/sharedmodules', '/usr/local/lib/python1.4/tkinter', '/usr/local/lib/python1.4/NumPy', '/usr/local/lib/python1.4/tkinter', '/usr/local/lib/python1.4/opengl', '/usr/local/lib/python1.4/pgsql']

となっています(自分でコンパイルしたものです). あるいは 

	$ strings `which python` | less
	
としても確認できます.
もし debian のコア python パッケージが Tkinter を含んでいないものだとし
たらそのためのパスがデフォルトでは sys.path に含まれていないことが考
えられます.
その場合の解決法は単純に sys.path に必要なパスを追加してあげるだけで
す. 

	>>> import sys
	>>> sys.path.append('/usr/local/lib/python1.4/tkiner')

などとします. 
このようにしてから

	>>> import Tkinter

とするとどうなるでしょうか.

sys.path に append するのは Tkinter.py[c] のあるパスですが, 上述のよ
うに Tkinter はその中から _tkinter モジュールを import します. 
ですから _tkinter モジュールのファイルもインストールされており, かつ
そのパスも sys.path に含まれている必要があることに注意して下さい. 
おそらく _tkinter モジュールのファイル名は _tkitner.so です. このファ
イルが存在するかどうかもチェックして下さい. 

パスの追加を自動的に行なうには環境変数 PYTHONPATH で追加パスを指定す
るか, 環境変数 PYTHONSTARTUP で指定したファイルの中で sys.path に追
加するかすれば良いでしょう. PYTHONSTARTUP は Emacs での .emacs に相
当し, sys.path の設定だけでなく任意の python コードを記述できます.

  ところで, せっかく Python をインストールしてあるというのに Grail 
でしか使わないというのは大変もったいないとは思いませんか?
というわけで最後に Python の宣伝をば少々.. (ちょっと強引 ^_^;;)
Python は

	o オブジェクト指向機構
	o モジュール機構
	o 例外処理機構
	o ファーストクラスオブジェクトとしての関数
	  (関数だけでなく全てがオブジェクト)
	o 簡潔なシンタクス
	o 豊富なライブラリ 
	  (tkインターフェイス, 数値演算モジュール, 
	   PostgreSQLインターフェイス, OpenGLインターフェイス, etc.)
	o C/C++ による拡張モジュール, 拡張クラスの作成インターフェイス

などなど, 非常に柔軟で魅力ある言語です. 
私は実験用のプログラムなどでもまずは Python でアルゴリズムを書いて小
さなデータで試し, 速度, あるいはメモリ的に必要であれば C で拡張クラ
スやモジュールを作成するようにしています. ダイナミックロードできるの
も便利ですし, 何といっても Python のレベルで, しかも対話的な環境で実
験ができるので大変便利です. 

  折角入れた Python です. プログラミング言語としても是非お試し下さい.

                                                                 /\
\\ 石川雅弘 ISHIKAWA, Masahiro                               // |==|
\\ 筑波大学大学院工学研究科 電子・情報工学専攻(博士後期1年) // |DD|
\\ 筑波大学電子情報工学系データベース研究室所属 0298-53-5385 // /||\