-
-
Notifications
You must be signed in to change notification settings - Fork 65
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Description
Hey,
I've installed advanced alchemy using
uv add advanced-alchemy
and when trying to create migrations using
uv run litestar database init
uv run litestar database make-migrations
during make-migrations I was seeing an exception
File "project/migrations/versions/2025-12-26_projects_bd10962d4493.py", line 16, in <module>
from advanced_alchemy.types.password_hash.argon2 import Argon2Hasher
File "project/.venv/lib/python3.14/site-packages/advanced_alchemy/types/password_hash/argon2.py", line 10, in <module>
from argon2 import PasswordHasher as Argon2PasswordHasher # pyright: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'argon2'
And the same for passlib and pwdlib
In the end I had to install advanced alchemy using
uv add advanced-alchemy[argon2,cli,passlib,pwdlib]
to make migrations work. This bevhaviour does not seem documented anywhere and is a bit surprising to see.
URL to code causing the issue
No response
MCVE
# Your MCVE code hereSteps to reproduce
1. Run
uv add advanced-alchemy
uv run litestar database init
uv run litestar database make-migrations
2. Observe exceptions raised
3. Run
uv add advanced-alchemy[argon2,cli,passlib,pwdlib]
uv run litestar database init
uv run litestar database make-migrations
4. Exceptions no longer raisedScreenshots
None
Logs
`uuid-utils` not installed, falling back to `uuid4` for UUID v7 generation.
project/.venv/lib/python3.14/site-packages/litestar/plugins/pydantic/utils.py:28: UserWarning: Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater.
from pydantic import v1 as pydantic_v1
{"event":"Context impl SQLiteImpl.","timestamp":"2025-12-28T10:09:18.252630Z","level":"info","message":"Context impl SQLiteImpl."}
{"event":"Will assume non-transactional DDL.","timestamp":"2025-12-28T10:09:18.252728Z","level":"info","message":"Will assume non-transactional DDL."}
Traceback (most recent call last):
File "project/.venv/bin/litestar", line 10, in <module>
sys.exit(run_cli())
~~~~~~~^^
File "project/.venv/lib/python3.14/site-packages/litestar/__main__.py", line 6, in run_cli
litestar_group()
~~~~~~~~~~~~~~^^
File "project/.venv/lib/python3.14/site-packages/rich_click/rich_command.py", line 402, in __call__
return super().__call__(*args, **kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/click/core.py", line 1485, in __call__
return self.main(*args, **kwargs)
~~~~~~~~~^^^^^^^^^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/rich_click/rich_command.py", line 216, in main
rv = self.invoke(ctx)
File "project/.venv/lib/python3.14/site-packages/click/core.py", line 1873, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/click/core.py", line 1873, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/click/core.py", line 1269, in invoke
return ctx.invoke(self.callback, **ctx.params)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/click/core.py", line 824, in invoke
return callback(*args, **kwargs)
File "project/.venv/lib/python3.14/site-packages/click/decorators.py", line 34, in new_func
return f(get_current_context(), *args, **kwargs)
File "project/.venv/lib/python3.14/site-packages/litestar/cli/_utils.py", line 269, in wrapped
return func(*args, **kwargs)
File "project/.venv/lib/python3.14/site-packages/click/decorators.py", line 34, in new_func
return f(get_current_context(), *args, **kwargs)
File "project/.venv/lib/python3.14/site-packages/litestar/cli/_utils.py", line 269, in wrapped
return func(*args, **kwargs)
File "project/.venv/lib/python3.14/site-packages/advanced_alchemy/cli.py", line 552, in create_revision
alembic_commands.revision(
~~~~~~~~~~~~~~~~~~~~~~~~~^
message=message,
^^^^^^^^^^^^^^^^
...<7 lines>...
process_revision_directives=process_revision_directives, # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "project/.venv/lib/python3.14/site-packages/advanced_alchemy/alembic/commands.py", line 294, in revision
return migration_command.revision(
~~~~~~~~~~~~~~~~~~~~~~~~~~^
config=self.config,
^^^^^^^^^^^^^^^^^^^
...<9 lines>...
process_revision_directives=process_revision_directives,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "project/.venv/lib/python3.14/site-packages/alembic/command.py", line 309, in revision
script_directory.run_env()
~~~~~~~~~~~~~~~~~~~~~~~~^^
File "project/.venv/lib/python3.14/site-packages/alembic/script/base.py", line 545, in run_env
util.load_python_file(self.dir, "env.py")
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/util/pyfiles.py", line 116, in load_python_file
module = load_module_py(module_id, path)
File "project/.venv/lib/python3.14/site-packages/alembic/util/pyfiles.py", line 136, in load_module_py
spec.loader.exec_module(module) # type: ignore
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "<frozen importlib._bootstrap_external>", line 759, in exec_module
File "<frozen importlib._bootstrap>", line 491, in _call_with_frames_removed
File "project/migrations/env.py", line 107, in <module>
asyncio.run(run_migrations_online())
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/nils/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/lib/python3.14/asyncio/runners.py", line 204, in run
return runner.run(main)
~~~~~~~~~~^^^^^^
File "/home/nils/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/lib/python3.14/asyncio/runners.py", line 127, in run
return self._loop.run_until_complete(task)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/home/nils/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/lib/python3.14/asyncio/base_events.py", line 719, in run_until_complete
return future.result()
~~~~~~~~~~~~~^^
File "project/migrations/env.py", line 99, in run_migrations_online
await connection.run_sync(do_run_migrations)
File "project/.venv/lib/python3.14/site-packages/sqlalchemy/ext/asyncio/engine.py", line 888, in run_sync
return await greenlet_spawn(
^^^^^^^^^^^^^^^^^^^^^
fn, self._proxied, *arg, _require_await=False, **kw
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "project/.venv/lib/python3.14/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
result = context.switch(value)
File "project/migrations/env.py", line 67, in do_run_migrations
context.run_migrations()
~~~~~~~~~~~~~~~~~~~~~~^^
File "<string>", line 8, in run_migrations
File "project/.venv/lib/python3.14/site-packages/alembic/runtime/environment.py", line 946, in run_migrations
self.get_context().run_migrations(**kw)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/runtime/migration.py", line 615, in run_migrations
for step in self._migrations_fn(heads, self):
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/command.py", line 285, in retrieve_migrations
revision_context.run_autogenerate(rev, context)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/autogenerate/api.py", line 570, in run_autogenerate
self._run_environment(rev, migration_context, True)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/autogenerate/api.py", line 588, in _run_environment
if set(self.script_directory.get_revisions(rev)) != set(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/script/base.py", line 276, in get_revisions
self.revision_map.get_revisions(id_),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/script/revision.py", line 542, in get_revisions
return sum([self.get_revisions(id_elem) for id_elem in id_], ())
~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/script/revision.py", line 544, in get_revisions
resolved_id, branch_label = self._resolve_revision_number(id_)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/script/revision.py", line 768, in _resolve_revision_number
self._revision_map
File "project/.venv/lib/python3.14/site-packages/sqlalchemy/util/langhelpers.py", line 1226, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
~~~~~~~~~^^^^^
File "project/.venv/lib/python3.14/site-packages/alembic/script/revision.py", line 209, in _revision_map
for revision in self._generator():
~~~~~~~~~~~~~~~^^
File "project/.venv/lib/python3.14/site-packages/alembic/script/base.py", line 155, in _load_revisions
script = Script._from_path(self, real_path)
File "project/.venv/lib/python3.14/site-packages/alembic/script/base.py", line 1033, in _from_path
module = util.load_python_file(dir_, filename)
File "project/.venv/lib/python3.14/site-packages/alembic/util/pyfiles.py", line 116, in load_python_file
module = load_module_py(module_id, path)
File "project/.venv/lib/python3.14/site-packages/alembic/util/pyfiles.py", line 136, in load_module_py
spec.loader.exec_module(module) # type: ignore
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "<frozen importlib._bootstrap_external>", line 759, in exec_module
File "<frozen importlib._bootstrap>", line 491, in _call_with_frames_removed
File "project/migrations/versions/2025-12-26_projects_bd10962d4493.py", line 16, in <module>
from advanced_alchemy.types.password_hash.argon2 import Argon2Hasher
File "project/.venv/lib/python3.14/site-packages/advanced_alchemy/types/password_hash/argon2.py", line 10, in <module>
from argon2 import PasswordHasher as Argon2PasswordHasher # pyright: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'argon2'
Exception ignored while joining a thread in _thread._shutdown():
Traceback (most recent call last):
File "/home/nils/.local/share/uv/python/cpython-3.14.2-linux-x86_64-gnu/lib/python3.14/threading.py", line 1583, in _shutdown
_thread_shutdown()
KeyboardInterrupt:Package Version
1.8.1
Platform
- Linux
- Mac
- Windows
- Other (Please specify in the description above)
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working