私はPython 2.5を使用しています。
これが私のフォルダツリーです。
ptdraft/
nib.py
simulations/
life/
life.py
(各フォルダには__init__.py
もありますが、ここでは読みやすくするために省略しています)
どうすれば life
モジュールの中から nib
モジュールをインポートできますか?sys.pathをいじらなくてもできることを期待しています。
注:実行中のメインモジュールは、ptdraft
フォルダにあります。
相対的なインポート(python >= 2.5)を使用することができます。
from ... import nib
(What's New in Python 2.5) PEP 328: Absolute and Relative Importsを参照してください。
EDIT: ドット '.' を追加して、2つのパッケージの上に行くようにしました。
モジュールフォルダをPYTHONPATHに追加してもうまくいかない場合は、Pythonインタープリタがインポートするモジュールを検索するプログラム内のsys.pathリストを変更することができます、とpythonドキュメントに書かれています。
spamという名前のモジュールがインポートされると、インタープリタはまずその名前の組み込みモジュールを探します。見つからなければ、変数sys.pathで指定されたディレクトリのリストからspam.pyという名前のファイルを検索します。
- 入力スクリプトのあるディレクトリ(またはカレントディレクトリ)。
- PYTHONPATH(ディレクトリ名のリストで、シェル変数PATHと同じ構文)。
- インストールに依存したデフォルトです。
初期化後、Pythonプログラムはsys.pathを変更することができます。実行中のスクリプトを含むディレクトリは、標準ライブラリのパスよりも先に、検索パスの先頭に置かれます。これは、そのディレクトリにあるスクリプトが、ライブラリディレクトリにある同名のモジュールの代わりにロードされることを意味します。これは、置き換えが意図されていない限り、エラーとなります。
これを知った上で、プログラムの中で次のようにします。
import sys
# Add the ptdraft folder path to the sys.path list
sys.path.append('/path/to/ptdraft/')
# Now you can import your module
from ptdraft import nib
# Or just
import ptdraft