上位ディレクトリにあるモジュールの import

モジュールが import 出来なかったので。

上位ディレクトリのモジュールを import しようとすると

以下構成における test/test_module.pylib/module.py を import しようとしたら出来なかった。

$ tree
.
├── Pipfile
├── Pipfile.lock
├── lib
│   ├── __init__.py
│   └── module.py
├── main.py
└── test
    └── test_module.py
from ../lib import module
import unittest

(略)
$ python3 test/test_module.py
  File "test_module.py", line 1
    from ../lib import module
           ^
SyntaxError: invalid syntax

これは書き方がダメっぽい。

from ..lib import module
import unittest

(略)

/ を省略してみた。

$ python3 test/test_module.py

Traceback (most recent call last):
  File "test_module.py", line 1, in <module>
    from ..lib import module
ValueError: attempted relative import beyond top-level package

やはりダメでした。

確認してみると

確認してみるとやはり出来ないようで、import を定義しモジュールを探すディレクトリは自身のディレクトリを root として上位ディレクトリは探しに行かないようです。

sys.path に上位のディレクトリパスを加える

というわけで sys.path に上位のディレクトリパスを加えるようにしたら import 出来るようになった。

import sys
import pathlib

currentdir = pathlib.Path(__file__).resolve().parent
sys.path.append(str(currentdir)+"/../lib/")

参考にある通りの記載で上手く行ってよかったよかったなのだけど、絶対忘れるので備忘録的にメモ。この方法がベストなのかなあ、と少しもやもや。

参考

お世話になりました。

© てっくらのーと/mkr-note 2024