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.
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.