Skip to content

models don't import from default PYTHONPATH of "." #797

@zzzeek

Description

@zzzeek

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions