weixin_39890652 2020-11-30 11:37
浏览 0

load_module_py & load_module_pyc do not initialize modules properly for Python3.5

Migrated issue, originally created by Abhilash Raj ()

load_module_py and load_module_pyc for Python 3.5 in alembic.utils don't initialize the module properly before executing them.

This bug was found in latest release of alembic when using ` inenv.py` :


Traceback (most recent call last):
  File "/home/maxking/.virtualenvs/py3/bin/alembic", line 11, in <module>
    load_entry_point('alembic', 'console_scripts', 'alembic')()
  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/alembic/config.py", line 479, in main
    CommandLine(prog=prog).main(argv=argv)
  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/alembic/config.py", line 473, in main
    self.run_cmd(cfg, options)
  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/alembic/config.py", line 456, in run_cmd
    **dict((k, getattr(options, k, None)) for k in kwarg)
  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/alembic/command.py", line 465, in current
    script.run_env()
  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/alembic/script/base.py", line 425, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/alembic/util/pyfiles.py", line 81, in load_python_file
    module = load_module_py(module_id, path)
  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/alembic/util/compat.py", line 84, in load_module_py
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/home/maxking/Documents/mm3/core/src/mailman/database/alembic/env.py", line 38, in <module>

  File "/home/maxking/.virtualenvs/py3/lib/python3.6/site-packages/atpublic-1.0-py3.6.egg/public/public.py", line 15, in public
KeyError: 'env_py'
</module></frozen></frozen></module>

Looks like load_module_py doesn't add the module to sys.modules which causes the error. The old load_module API did this automatically.

I am not sure if module_from_spec should take care of this (i.e. it is a bug in stdlib) or it should be addressed in alembic.

该提问来源于开源项目:sqlalchemy/alembic

  • 写回答

5条回答 默认 最新

  • weixin_39890652 2020-11-30 11:37
    关注

    Barry Warsaw () wrote:

    FWIW, I don't believe it's a bug in module_from_spec(). I think you've found the root cause of the bug.

    评论

报告相同问题?