Alembicのインポートエラー
毎度のことながらエラーに直面するとブチギレながら奇声をあげるのですが、今回はその回数が特に多かったように感じたのでメモ。
解決した今もなんで治ったのかよくわかっていませんが、とりあえず解決したのでよし。
直面した問題
外部のmodelディレクトリの中で定義されているbaseを読み込んでくれない問題。
ちなみに別のディレクトリで同じ階層の以下の場合はエラーがでない。
吐いていたエラーメッセージはNo module Error
File "alembic/env.py", line 7, in
from model.base import Base
ModuleNotFoundError: No module named 'model'
ここで一番意味がわからなかったのは、この同一階層かつ別ディレクトリにあるsite-pacagkesをまるまるっとコピーしてきたのにエラーを吐き続けるところ。
同じ階層、同じ方法でインポートしようとして片方は成功、片方は失敗する理由が全然わからず。
困りに困ってggりまくったら天啓を発見した。
Alembic: alembic revision says Import Error
それにしたがって
$ export PYTHONPATH=./
をやってからautogenerateをすると…
(base) toritakashi@toritakashi ~/fintech-final/tradingbot (release/launch_bottom_trend_follow) $ alembic revision --autogenerate -m "Base revision"
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'backtest_management'
INFO [alembic.autogenerate.compare] Detected removed table 'bottom_trend_follow_backtest_management'
INFO [alembic.autogenerate.compare] Detected removed table 'bitmex_original_ohlcv_1min'
Generating /home/toritakashi/fintech-final/tradingbot/alembic/versions/32ba1f11caba_base_revision.py ... done
(base) toritakashi@toritakashi ~/fintech-final/tradingbot (release/launch_bottom_trend_follow) $
をすると無事エラーを吐くことなくautogenerateしてくれた。30分費やしてようやく発狂は止んだ。