This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrfutil errors on macOS

I am trying to compile nrfutil into a standalone executable, following the instructions at: https://github.com/NordicSemiconductor/pc-nrfutil

This works on Linux, and for Windows there are standalone executable attached to the nrfutil releases, but for mac I get the following error when attempting to use pyinstaller to generate a self-contained executable:

$ pyinstaller ./nrfutil.spec 

29 INFO: PyInstaller: 3.4

30 INFO: Python: 2.7.15

35 INFO: Platform: Darwin-17.5.0-x86_64-i386-64bit

41 INFO: UPX is not available.

42 INFO: Extending PYTHONPATH with paths

['/Users/api_team/pc-nrfutil']

42 INFO: checking Analysis

48 INFO: Building because inputs changed

48 INFO: Initializing module dependency graph...

50 INFO: Initializing module graph hooks...

109 INFO: running Analysis Analysis-00.toc

115 INFO: Caching module hooks...

118 INFO: Analyzing nordicsemi/__main__.py

2615 INFO: Processing pre-find module path hook   distutils

3528 INFO: Processing pre-safe import module hook   _xmlplus

7153 INFO: Loading module hooks...

7153 INFO: Loading module hook "hook-distutils.py"...

7154 INFO: Loading module hook "hook-sysconfig.py"...

7155 INFO: Loading module hook "hook-xml.py"...

7229 INFO: Loading module hook "hook-httplib.py"...

7230 INFO: Loading module hook "hook-encodings.py"...

7771 INFO: Loading module hook "hook-pkg_resources.py"...

8041 INFO: Processing pre-safe import module hook   win32com

8332 INFO: checking Tree

8333 INFO: Building Tree because Tree-00.toc is non existent

8333 INFO: Building Tree Tree-00.toc

8334 INFO: Looking for ctypes DLLs

8436 INFO: Analyzing run-time hooks ...

8441 INFO: Including run-time hook 'pyi_rth_pkgres.py'

8443 INFO: Including run-time hook 'pyi_rth_multiprocessing.py'

8459 INFO: Looking for dynamic libraries

8559 INFO: Looking for eggs

8559 INFO: Using Python library /Users/api_team/miniconda3/envs/nrfutil/lib/libpython2.7.dylib

8565 INFO: Warnings written to /Users/api_team/pc-nrfutil/build/nrfutil/warn-nrfutil.txt

8607 INFO: Graph cross-reference written to /Users/api_team/pc-nrfutil/build/nrfutil/xref-nrfutil.html

8780 INFO: Appending 'binaries' from .spec

8784 INFO: checking PYZ

8788 INFO: Building because toc changed

8788 INFO: Building PYZ (ZlibArchive) /Users/api_team/pc-nrfutil/build/nrfutil/PYZ-00.pyz

9360 INFO: Building PYZ (ZlibArchive) /Users/api_team/pc-nrfutil/build/nrfutil/PYZ-00.pyz completed successfully.

9516 INFO: checking PKG

9516 INFO: Building PKG because PKG-00.toc is non existent

9516 INFO: Building PKG (CArchive) PKG-00.pkg

Traceback (most recent call last):

  File "/Users/api_team/miniconda3/envs/nrfutil/bin/pyinstaller", line 11, in <module>

    sys.exit(run())

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/__main__.py", line 111, in run

    run_build(pyi_config, spec_file, **vars(args))

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/__main__.py", line 63, in run_build

    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/building/build_main.py", line 838, in main

    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/building/build_main.py", line 784, in build

    exec(text, spec_namespace)

  File "<string>", line 37, in <module>

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/building/api.py", line 424, in __init__

    strip_binaries=self.strip, upx_binaries=self.upx,

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/building/api.py", line 196, in __init__

    self.__postinit__()

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/building/datastruct.py", line 158, in __postinit__

    self.assemble()

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/building/api.py", line 259, in assemble

    dist_nm=inm)

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/building/utils.py", line 228, in checkCache

    dylib.mac_set_relative_dylib_deps(cachedfile, dist_nm)

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/PyInstaller/depend/dylib.py", line 308, in mac_set_relative_dylib_deps

    dll = MachO(libname)

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/macholib/MachO.py", line 95, in __init__

    self.load(fp)

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/macholib/MachO.py", line 110, in load

    self.load_header(fh, 0, size)

  File "/Users/api_team/miniconda3/envs/nrfutil/lib/python2.7/site-packages/macholib/MachO.py", line 147, in load_header

    header, fh))

ValueError: Unknown Mach-O header: 0x230d0a23 in <open file '/Users/api_team/Library/Application Support/pyinstaller/bincache00_py27_64bit/lib/linux/__init__.py', mode 'rb' at 0x10e642150>

Is there a specific version of pyinstaller that must be used? I have tried the instructions for nrfutil v3.5.1 and v4.0.0 with the same results. 

There is an old github issue here that has not be addressed: https://github.com/NordicSemiconductor/pc-nrfutil/issues/118

It seems from the comments on the pc-nrfutil github issues that the maintainers would prefer issues like this to be posted here on DevZone, but I will make a Github issue as well.

As a workaround I've also attempted to use pip to install nrfutil, but that fails at runtime with the following error (again with both v3.5.1 and v4.0.0):

Starting DFU update over dfu_usb...

  [------------------------------------]    0%

Traceback (most recent call last):

  File "/Users/api_team/miniconda3/envs/dfu/bin/nrfutil", line 11, in <module>

    sys.exit(cli())

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/click/core.py", line 722, in __call__

    return self.main(*args, **kwargs)

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/click/core.py", line 697, in main

    rv = self.invoke(ctx)

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/click/core.py", line 1066, in invoke

    return _process_result(sub_ctx.command.invoke(sub_ctx))

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/click/core.py", line 1066, in invoke

    return _process_result(sub_ctx.command.invoke(sub_ctx))

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/click/core.py", line 895, in invoke

    return ctx.invoke(self.callback, **ctx.params)

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/click/core.py", line 535, in invoke

    return callback(*args, **kwargs)

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/nordicsemi/__main__.py", line 827, in usb_serial

    do_serial(package, port, connect_delay, flow_control, packet_receipt_notification, baud_rate, False)

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/nordicsemi/__main__.py", line 793, in do_serial

    dfu.dfu_send_images()

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/nordicsemi/dfu/dfu.py", line 129, in dfu_send_images

    self._dfu_send_image(self.manifest.application)

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/nordicsemi/dfu/dfu.py", line 90, in _dfu_send_image

    self.dfu_transport.open()

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/nordicsemi/dfu/dfu_transport_serial.py", line 213, in open

    self.__set_prn()

  File "/Users/api_team/miniconda3/envs/dfu/lib/python3.7/site-packages/nordicsemi/dfu/dfu_transport_serial.py", line 308, in __set_prn

    + map(ord, struct.pack('<H', self.prn)))

TypeError: can only concatenate list (not "map") to list

DFU update over USB failed

All of the above was executed in a Python 2 virtual environment.

Parents Reply Children
Related