[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 // /||\