Catkin plugin: pip installation failures don't show log

Bug #1737225 reported by Kyle Fazzari
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Snapcraft
New
Undecided
Unassigned

Bug Description

For some reason, when the Catkin plugin is installing a pip dependency that fails to build, the build log isn't shown. For example, RPi.GPIO requires python-dev to build, and when running pip by hand it errors out looking for Python.h, but the Catkin plugin just shows this:

Installing pip dependencies...
  Failed building wheel for RPi.GPIO
Command "/home/kyrofa/edukit_bot/parts/workspace/install/usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-XKP5TB/RPi.GPIO/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-Bc7SEG-record/install-record.txt --single-version-externally-managed --no-compile --user --prefix=" failed with error code 1 in /tmp/pip-build-XKP5TB/RPi.GPIO/
Traceback (most recent call last):
  File "/usr/bin/snapcraft", line 9, in <module>
    load_entry_point('snapcraft==2.35', 'console_scripts', 'snapcraft')()
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 542, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2569, in load_entry_point
    return ep.load()
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2229, in load
    return self.resolve()
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2235, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python3/dist-packages/snapcraft/cli/__main__.py", line 19, in <module>
    run(prog_name='snapcraft')
  File "/usr/lib/python3/dist-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 1037, in invoke
    return Command.invoke(self, ctx)
  File "/usr/lib/python3/dist-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3/dist-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/lib/python3/dist-packages/snapcraft/cli/__init__.py", line 124, in run
    ctx.forward(lifecyclecli.commands['snap'])
  File "/usr/lib/python3/dist-packages/click/core.py", line 552, in forward
    return self.invoke(cmd, **kwargs)
  File "/usr/lib/python3/dist-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/snapcraft/cli/lifecycle.py", line 140, in snap
    project_options, directory=directory, output=output)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_packer.py", line 45, in snap
    execute('prime', project_options)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_runner.py", line 80, in execute
    _Executor(config, project_options).run(step, part_names)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_runner.py", line 175, in run
    self._run_step(step, part, part_names)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/lifecycle/_runner.py", line 212, in _run_step
    getattr(part, step)()
  File "/usr/lib/python3/dist-packages/snapcraft/internal/pluginhandler/__init__.py", line 252, in pull
    self.plugin.pull()
  File "/usr/lib/python3/dist-packages/snapcraft/plugins/catkin.py", line 421, in pull
    self._setup_dependencies(rosdep, catkin)
  File "/usr/lib/python3/dist-packages/snapcraft/plugins/catkin.py", line 445, in _setup_dependencies
    self._setup_pip_dependencies(system_dependencies.get('pip'))
  File "/usr/lib/python3/dist-packages/snapcraft/plugins/catkin.py", line 476, in _setup_pip_dependencies
    self._pip.install(pip_dependencies)
  File "/usr/lib/python3/dist-packages/snapcraft/plugins/_python/_pip.py", line 259, in install
    '--find-links', self._python_package_dir] + args, cwd=cwd)
  File "/usr/lib/python3/dist-packages/snapcraft/plugins/_python/_pip.py", line 386, in _run
    **kwargs)
  File "/usr/lib/python3/dist-packages/snapcraft/internal/common.py", line 74, in run_output
    output = subprocess.check_output(['/bin/sh', f.name] + cmd, **kwargs)
  File "/usr/lib/python3.5/subprocess.py", line 626, in check_output
    **kwargs).stdout
  File "/usr/lib/python3.5/subprocess.py", line 708, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/bin/sh', '/tmp/tmpesua4bvb', '/home/kyrofa/edukit_bot/parts/workspace/install/usr/bin/python2', '-m', 'pip', 'install', '--user', '--no-compile', '--no-index', '--find-links', '/home/kyrofa/edukit_bot/parts/workspace/python-packages', 'RPi.GPIO']' returned non-zero exit status 1

That experience needs to be improved.

Revision history for this message
Kyle Fazzari (kyrofa) wrote :

The pip installation goes through `check_call` so I'm not sure why stdout seems to be eaten. The workaround is to create a venv in the build environment and try installing the package by hand, where you'll see the real failures.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.