Sorry to be this person. I also tried using the Napari plugin. I installed it via the plugin manager. That seems to have worked and the menu item appears. But, when I try to open it, I get these errors:
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\npe2\_command_registry.py:33, in CommandHandler.resolve(self=CommandHandler(id='ultrack.main_widget', function=None, python_name='ultrack.widgets:UltrackWidget'))
32 try:
---> 33 self.function = utils.import_python_name(self.python_name)
self.function = None
self.python_name = 'ultrack.widgets:UltrackWidget'
self = CommandHandler(id='ultrack.main_widget', function=None, python_name='ultrack.widgets:UltrackWidget')
utils = <module 'npe2.manifest.utils' from 'C:\\Users\\smcardle\\AppData\\Local\\napari-0.7.0\\envs\\napari-0.7.0\\Lib\\site-packages\\npe2\\manifest\\utils.py'> 34 except Exception as e:
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\npe2\manifest\utils.py:256, in import_python_name(python_name='ultrack.widgets:UltrackWidget')
254 module_name, funcname = match.groups() # type: ignore [union-attr]
--> 256 mod = import_module(module_name)
module_name = 'ultrack.widgets' 257 return getattr(mod, funcname)
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\importlib\__init__.py:126, in import_module(name='ultrack.widgets', package=None)
125 level += 1
--> 126 return _bootstrap._gcd_import(name[level:], package, level)
level = 0
name = 'ultrack.widgets'
name[level:] = 'ultrack.widgets'
package = None
_bootstrap = <module '_frozen_importlib' (frozen)>
File <frozen importlib._bootstrap>:1204, in _gcd_import(name='ultrack.widgets', package=None, level=0)
File <frozen importlib._bootstrap>:1176, in _find_and_load(name='ultrack.widgets', import_=<function _gcd_import>)
File <frozen importlib._bootstrap>:1126, in _find_and_load_unlocked(name='ultrack.widgets', import_=<function _gcd_import>)
File <frozen importlib._bootstrap>:241, in _call_with_frames_removed(f=<function _gcd_import>, *args=('ultrack',), **kwds={})
File <frozen importlib._bootstrap>:1204, in _gcd_import(name='ultrack', package=None, level=0)
File <frozen importlib._bootstrap>:1176, in _find_and_load(name='ultrack', import_=<function _gcd_import>)
File <frozen importlib._bootstrap>:1147, in _find_and_load_unlocked(name='ultrack', import_=<function _gcd_import>)
File <frozen importlib._bootstrap>:690, in _load_unlocked(spec=ModuleSpec(name='ultrack', loader=<_frozen_impor...nvs\\napari-0.7.0\\Lib\\site-packages\\ultrack']))
File <frozen importlib._bootstrap_external>:940, in exec_module(self=<_frozen_importlib_external.SourceFileLoader object>, module=<module 'ultrack' from 'C:\\Users\\smcardle\\App...0.7.0\\Lib\\site-packages\\ultrack\\__init__.py'>)
File <frozen importlib._bootstrap>:241, in _call_with_frames_removed(f=<built-in function exec>, *args=(<code object <module> at 0x000001E818B9EBE0, fil...0\Lib\site-packages\ultrack\__init__.py", line 1>, {'MainConfig': <class 'ultrack.config.config.MainConfig'>, '__builtins__': {'ArithmeticError': <class 'ArithmeticError'>, 'AssertionError': <class 'AssertionError'>, 'AttributeError': <class 'AttributeError'>, 'BaseException': <class 'BaseException'>, 'BaseExceptionGroup': <class 'BaseExceptionGroup'>, 'BlockingIOError': <class 'BlockingIOError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'BufferError': <class 'BufferError'>, 'BytesWarning': <class 'BytesWarning'>, 'ChildProcessError': <class 'ChildProcessError'>, ...}, '__cached__': r'C:\Users\smcardle\AppData\Local\napari-0.7.0\env...ages\ultrack\__pycache__\__init__.cpython-311.pyc', '__doc__': None, '__file__': r'C:\Users\smcardle\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\__init__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': 'ultrack', '__package__': 'ultrack', '__path__': [r'C:\Users\smcardle\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack'], '__spec__': ModuleSpec(name='ultrack', loader=<_frozen_impor...nvs\\napari-0.7.0\\Lib\\site-packages\\ultrack']), ...}), **kwds={})
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\__init__.py:16
15 from ultrack.config.config import MainConfig, load_config
---> 16 from ultrack.core.export.ctc import to_ctc
17 from ultrack.core.export.exporter import export_tracks_by_extension
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\core\export\__init__.py:1
----> 1 from ultrack.core.export.ctc import to_ctc
2 from ultrack.core.export.exporter import export_tracks_by_extension
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\core\export\ctc.py:22
21 from ultrack.config.dataconfig import DataConfig
---> 22 from ultrack.core.database import NodeDB
23 from ultrack.core.export.utils import (
24 export_segmentation_generic,
25 filter_nodes_generic,
26 solution_dataframe_from_sql,
27 )
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\core\database.py:27
26 from ultrack.utils.array import assert_same_length
---> 27 from ultrack.utils.constants import NO_PARENT
29 Base = declarative_base()
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\utils\__init__.py:1
----> 1 from ultrack.utils.edge import labels_to_contours, labels_to_edges
2 from ultrack.utils.estimation import estimate_parameters_from_labels
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\utils\edge.py:10
9 from ultrack.utils.array import create_zarr
---> 10 from ultrack.utils.cuda import import_module, to_cpu, xp
11 from ultrack.utils.deprecation import rename_argument
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\ultrack\utils\cuda.py:35
34 try:
---> 35 import torch as th
37 LOG.info("torch found.")
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\torch\__init__.py:285
283 kernel32.SetErrorMode(prev_error_mode)
--> 285 _load_dll_libraries()
286 del _load_dll_libraries
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\torch\__init__.py:268, in _load_dll_libraries()
265 err.strerror += (
266 f' Error loading "{dll}" or one of its dependencies.'
267 )
--> 268 raise err
err = OSError(22, 'The specified procedure could not be found.', None, 127) 269 elif res is not None:
OSError: [WinError 127] The specified procedure could not be found. Error loading "C:\Users\smcardle\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\torch\lib\shm.dll" or one of its dependencies.
The above exception was the direct cause of the following exception:
RuntimeError Traceback (most recent call last)
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\app_model\backends\qt\_qaction.py:70, in QCommandAction._on_triggered(self=QMenuItemAction(MenuItem(when=None, group='3_plu...='Ultrack (ultrack)'))), alt=None), app='napari'), checked=True)
66 def _on_triggered(self, checked: bool) -> None:
67 # execute_command returns a Future, for the sake of eventually being
68 # asynchronous without breaking the API. For now, we call result()
69 # to raise any exceptions.
---> 70 self._app.commands.execute_command(self._command_id).result()
self._command_id = 'ultrack:Ultrack'
self = QMenuItemAction(MenuItem(when=None, group='3_plugin_contributions', order=None, command=CommandRule(id='ultrack:Ultrack', title='Ultrack', category=None, tooltip=None, status_tip=None, icon=None, icon_visible_in_menu=True, enablement=None, short_title=None, toggled=ToggleRule(condition=None, get_current=functools.partial(<function _get_current_dock_status at 0x000001E78E856DE0>, full_name='Ultrack (ultrack)'))), alt=None), app='napari')
self._app = Application('napari')
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\app_model\registries\_commands_reg.py:247, in CommandsRegistry.execute_command(self=<CommandsRegistry at 0x1e78e727c90 (177 commands)>, id='ultrack:Ultrack', execute_asynchronously=False, *args=(), **kwargs={})
243 except Exception as e:
244 if self._raise_synchronous_exceptions:
245 # note, the caller of this function can also achieve this by
246 # calling `future.result()` on the returned future object.
--> 247 raise e
248 future.set_exception(e)
250 return future
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\app_model\registries\_commands_reg.py:242, in CommandsRegistry.execute_command(self=<CommandsRegistry at 0x1e78e727c90 (177 commands)>, id='ultrack:Ultrack', execute_asynchronously=False, *args=(), **kwargs={})
240 future: Future = Future()
241 try:
--> 242 future.set_result(cmd(*args, **kwargs))
future = <Future at 0x1e79dc56390 state=pending>
cmd = <function Store.inject.<locals>._inner.<locals>._exec at 0x000001E79A8E36A0>
args = ()
kwargs = {} 243 except Exception as e:
244 if self._raise_synchronous_exceptions:
245 # note, the caller of this function can also achieve this by
246 # calling `future.result()` on the returned future object.
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\in_n_out\_store.py:934, in Store.inject_processors.<locals>._deco.<locals>._exec(*args=(), **kwargs={})
932 @wraps(func)
933 def _exec(*args: P.args, **kwargs: P.kwargs) -> R:
--> 934 result = func(*args, **kwargs)
func = <function Store.inject.<locals>._inner.<locals>._exec at 0x000001E79A8E3740>
args = ()
kwargs = {} 935 if result is not None:
936 self.process(
937 result,
938 type_hint=type_hint,
(...) 941 _funcname=getattr(func, "__qualname__", str(func)),
942 )
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\in_n_out\_store.py:804, in Store.inject.<locals>._inner.<locals>._exec(*args=(), **kwargs={})
797 logger.debug(
798 " Calling %s with %r (injected %r)",
799 _fname,
800 bound.arguments,
801 _injected_names,
802 )
803 try:
--> 804 result = func(**bound.arguments)
bound = <BoundArguments (plugin='ultrack', widget_name='Ultrack', full_name='Ultrack (ultrack)')>
func = functools.partial(<function _toggle_or_get_widget at 0x000001E78E856D40>, plugin='ultrack', widget_name='Ultrack', full_name='Ultrack (ultrack)')
bound.arguments = {'plugin': 'ultrack', 'widget_name': 'Ultrack', 'full_name': 'Ultrack (ultrack)'} 805 except TypeError as e:
806 if "missing" not in e.args[0]:
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\napari\_qt\_qplugins\_qnpe2.py:199, in _toggle_or_get_widget(plugin='ultrack', widget_name='Ultrack', full_name='Ultrack (ultrack)')
196 return None
198 # Get widget param name (if any) and check type
--> 199 widget_callable, _ = get_widget_contribution(plugin, widget_name) # type: ignore [misc]
plugin = 'ultrack'
widget_name = 'Ultrack' 200 widget_param = _get_widget_viewer_param(widget_callable, widget_name)
202 kwargs = {}
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\napari\plugins\_npe2.py:109, in get_widget_contribution(plugin_name='ultrack', widget_name='Ultrack')
107 if contrib.plugin_name == plugin_name:
108 if not widget_name or contrib.display_name == widget_name:
--> 109 return contrib.get_callable(), contrib.display_name
contrib = WidgetContribution(command='ultrack.main_widget', display_name='Ultrack', autogenerate=False)
contrib.display_name = 'Ultrack' 110 widgets_seen.add(contrib.display_name)
111 if widget_name and widgets_seen:
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\npe2\manifest\contributions\_widgets.py:50, in WidgetContribution.get_callable(self=WidgetContribution(command='ultrack.main_widget', display_name='Ultrack', autogenerate=False), _registry=None)
47 def get_callable(
48 self, _registry: CommandRegistry | None = None
49 ) -> Callable[..., Widget]:
---> 50 func = super().get_callable()
51 if self.autogenerate:
52 try:
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\npe2\manifest\utils.py:67, in Executable.get_callable(self=WidgetContribution(command='ultrack.main_widget', display_name='Ultrack', autogenerate=False), _registry=<npe2._command_registry.CommandRegistry object>)
64 from npe2._plugin_manager import PluginManager
66 _registry = PluginManager.instance().commands
---> 67 return _registry.get(self.command)
_registry = <npe2._command_registry.CommandRegistry object at 0x000001E7882EAD50>
self.command = 'ultrack.main_widget'
self = WidgetContribution(command='ultrack.main_widget', display_name='Ultrack', autogenerate=False)
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\npe2\_command_registry.py:139, in CommandRegistry.get(self=<npe2._command_registry.CommandRegistry object>, id='ultrack.main_widget')
137 if id not in self._commands: # sourcery skip
138 raise KeyError(f"command {id!r} not registered")
--> 139 return self._commands[id].resolve()
id = 'ultrack.main_widget'
self._commands = {'ultrack.get_reader': CommandHandler(id='ultrack.get_reader', function=None, python_name='ultrack.reader.napari_reader:napari_get_reader'), 'ultrack.main_widget': CommandHandler(id='ultrack.main_widget', function=None, python_name='ultrack.widgets:UltrackWidget'), 'ultrack.hierarchy_viz_widget': CommandHandler(id='ultrack.hierarchy_viz_widget', function=None, python_name='ultrack.widgets:HierarchyVizWidget'), 'napari-bioformats.read_file': CommandHandler(id='napari-bioformats.read_file', function=<function get_reader at 0x000001E7BD88EC00>, python_name='napari_bioformats._plugin:get_reader')}
self = <npe2._command_registry.CommandRegistry object at 0x000001E7882EAD50>
self._commands[id] = CommandHandler(id='ultrack.main_widget', function=None, python_name='ultrack.widgets:UltrackWidget')
File ~\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\npe2\_command_registry.py:35, in CommandHandler.resolve(self=CommandHandler(id='ultrack.main_widget', function=None, python_name='ultrack.widgets:UltrackWidget'))
33 self.function = utils.import_python_name(self.python_name)
34 except Exception as e:
---> 35 raise RuntimeError(
self.python_name = 'ultrack.widgets:UltrackWidget'
self = CommandHandler(id='ultrack.main_widget', function=None, python_name='ultrack.widgets:UltrackWidget') 36 f"Failed to import command at {self.python_name!r}: {e}"
37 ) from e
39 return self.function
RuntimeError: Failed to import command at 'ultrack.widgets:UltrackWidget': [WinError 127] The specified procedure could not be found. Error loading "C:\Users\smcardle\AppData\Local\napari-0.7.0\envs\napari-0.7.0\Lib\site-packages\torch\lib\shm.dll" or one of its dependencies.
Sorry to be this person. I also tried using the Napari plugin. I installed it via the plugin manager. That seems to have worked and the menu item appears. But, when I try to open it, I get these errors:
INFO ultrack.utils.cuda [2026-04-20 14:09:26,462] (MainThread): cupy not found.