given a structure:
./alembic/env.py
./myapp/models.py
./myapp/__init__.py
with env.py:
from myapp.models import Base
target_metadata = Base.metadata
and a local virtual environment. If I run from ., I can import the app:
$ .venv/bin/python
Python 3.8.3 (default, May 23 2020, 16:34:37)
[GCC 9.3.1 20200408 (Red Hat 9.3.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from myapp import models
>>>
however running alembic seems to not honor this:
$ .venv/bin/alembic revision -m "rev1" --autogenerate
Traceback (most recent call last):
File ".venv/bin/alembic", line 8, in <module>
sys.exit(main())
File "/home/classic/dev/test/.venv/lib/python3.8/site-packages/alembic/config.py", line 559, in main
CommandLine(prog=prog).main(argv=argv)
File "/home/classic/dev/test/.venv/lib/python3.8/site-packages/alembic/config.py", line 553, in main
self.run_cmd(cfg, options)
File "/home/classic/dev/test/.venv/lib/python3.8/site-packages/alembic/config.py", line 530, in run_cmd
fn(
File "/home/classic/dev/test/.venv/lib/python3.8/site-packages/alembic/command.py", line 212, in revision
script_directory.run_env()
File "/home/classic/dev/test/.venv/lib/python3.8/site-packages/alembic/script/base.py", line 481, in run_env
util.load_python_file(self.dir, "env.py")
File "/home/classic/dev/test/.venv/lib/python3.8/site-packages/alembic/util/pyfiles.py", line 97, in load_python_file
module = load_module_py(module_id, path)
File "/home/classic/dev/test/.venv/lib/python3.8/site-packages/alembic/util/compat.py", line 182, in load_module_py
spec.loader.exec_module(module)
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "alembic/env.py", line 20, in <module>
from myapp.models import Base
ModuleNotFoundError: No module named 'myapp'
that seems pretty unnecessary so let's fix that.
given a structure:
with env.py:
and a local virtual environment. If I run from ., I can import the app:
however running alembic seems to not honor this:
that seems pretty unnecessary so let's fix that.