今更ながら、暗黙の相対importについて気づきました。
例。このような構成のモジュールを考えます。
spam/ __init__.py egg.py ham.py
eggからhamをimportしようととします。
#egg.py import ham
カレントディレクトリがspamで無い限り、Python3xではエラーになります。
D:\Owner\temp>dir /B spam D:\Owner\temp>C:\Python26\Python.exe -c "import spam.egg" D:\Owner\temp>C:\Python31\Python.exe -c "import spam.egg" Traceback (most recent call last): File "", line 1, in File "spam\egg.py", line 1, in import ham ImportError: No module named ham D:\Owner\temp\spam>cd spam D:\Owner\temp\spam>C:\Python26\Python.exe -c "import egg" D:\Owner\temp\spam>C:\Python31\Python.exe -c "import egg"
明示的相対importはこう書きます。
#egg.py from . import ham
D:\Owner\temp>dir /B spam D:\Owner\temp>C:\Python26\Python.exe -c "import spam.egg" D:\Owner\temp>C:\Python31\Python.exe -c "import spam.egg"