Closed A03ki closed 4 years ago
tweepyを参考にすると相対インポートを使っている。 ちなみにinit.pyには何も記述されていない。
https://github.com/tweepy/tweepy/tree/master/tests https://github.com/tweepy/tweepy/blob/master/tests/test_api.py#L8 https://github.com/tweepy/tweepy/blob/master/tests/test_auth.py#L8 https://github.com/tweepy/tweepy/blob/master/tests/test_cursors.py#L1 https://github.com/tweepy/tweepy/blob/master/tests/test_rate_limit.py#L4 https://github.com/tweepy/tweepy/blob/master/tests/test_resultset.py#L1 https://github.com/tweepy/tweepy/blob/master/tests/test_streaming.py#L9-L10
__init__.pyに絶対インポートの記述を行う。
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '.'))
test_storages.pyでは相対インポートを使わなくていい。
from test_tables import test_ids, insert_test_db
この方法は解決策1と2の問題点を克服した上、python setup.py test
とpython tests/test_storages.py
を問題なく実行できる。
前提
あとでstorages.pyとtest_storages.pyのファイルを追加する。 このtest_storages.pyにおいて、test_tablesに記述されている
test_ids
とinsert_test_db
を使いたい。しかしながら、この記述方法だと全てのテストを実行する際にエラーになってしまう。
出力:
解決策1
相対インポートを使う。
こうすることで
python setup.py test
はエラーなく実行できる。問題点
相対インポートにしたため、テストファイルごとに実行するとエラーになってしまう。
出力:
解決策2
絶対インポートを使う。
python setup.py test
とpython tests/test_storages.py
で実行できる。問題点
PEP8 E402に怒られる。
E402 module level import not at top of file
参考文献
Pythonの相対インポートで上位ディレクトリ・サブディレクトリを指定 | note.nkmk.me