AlembicのAuto Generationでimport errorが出た場合の対処法

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分費やしてようやく発狂は止んだ。