Por que o snapcraft falha com: módulo 'magic' não tem atributo 'open'

2

Ao tentar capturar um projeto, recuperamos esse erro do snapcraft:

Traceback (most recent call last):
  File "/usr/bin/snapcraft", line 31, in <module>
    snapcraft.main.main()
  File "/usr/lib/python3/dist-packages/snapcraft/main.py", line 226, in main
    return run(args, project_options)
  File "/usr/lib/python3/dist-packages/snapcraft/main.py", line 282, in run
    lifecycle.snap(project_options, args['<directory>'], args['--output'])
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle.py", line 289, in snap
    snap = execute('prime', project_options)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle.py", line 103, in execute
    _Executor(config, project_options).run(step, part_names)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle.py", line 161, in run
    self._run_step(step, part, part_names)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle.py", line 197, in _run_step
    getattr(part, step)()
  File "/usr/lib/python3/dist-packages/snapcraft/internal/pluginhandler.py", line 383, in prime
    dependencies = _find_dependencies(self.snapdir, snap_files)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/pluginhandler.py", line 723, in _find_dependencies
    ms = magic.open(magic.NONE)
AttributeError: module 'magic' has no attribute 'open'

O que significa e como isso pode ser resolvido?

    
por elopio 09.12.2016 / 07:06

1 resposta

2

Existem dois módulos python chamados magic, com diferentes APIs.

O que o snapcraft requer é empacotado como um deb chamado python3-magic. Este corresponde ao módulo file-magic em pypi: link

O outro é chamado de mágica no pypi: link

Então, se você fizer isso:

sudo pip install magic

Você receberá o errado, e ele será instalado em um caminho que tenha precedência sobre o deb do python3-magic instalado com o apt. Isso é o que causa o erro.

Para verificar se você possui o outro módulo mágico instalado pelo pip:

pip3 list | grep magic

E para removê-lo e corrigir snapcraft:

pip3 uninstall magic
    
por elopio 09.12.2016 / 07:06