自作モジュール作成 3 同一階層ディレクトリ中ファイルのインポート

前回、別のモジュールをインポートしようとしたら、エラーになってしまいました。
今回は、これを解消したいと思います。

現在のディレクトリ構造。

src/
├── main.py
└── solima
    ├── rectangle.py
    └── square.py

■解決のための準備知識
__file__は、実行スクリプトのファイルを表す。
1) スクリプトファイルを相対パスで実行した時は、相対パスを返す。
2) スクリプトファイルを絶対パスで実行した時、または、他のスクリプトからインポートされたときは、絶対パスを返す。

よって、同一階層ディレクトリ中のファイルをインポートするには、スクリプトの先頭に以下の文を付け加える。

import sys,os
sys.path.append(os.path.dirname(__file__))

これを踏まえると、square.py中のimport部分を以下のように変更すればよい。

(変更前)

from rectangle import Rectangle

   ↓
(変更後)

import sys,os
sys.path.append(os.path.dirname(__file__))
from rectangle import Rectangle

対話モードで実験。

>>> import solima.rectangle
>>> import solima.square
>>> solima.rectangle.Rectangle(3, 4).area()
12
>>> solima.rectangle.Square(5).area()
25

今度は成功。

自作モジュール作成 4 パッケージを直接インポートする »

Pythonプログラミング物語 © 2016 Frontier Theme