nschloe / tiptop

:desktop_computer: Command-line system monitoring

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG] On app start: `AttributeError: module 'psutil' has no attribute 'sensors_temperatures'`

leroyvn opened this issue · comments

Issue description

I get an AttributeError upon starting the application. See traceback below for details.

Traceback
➜ tiptop
╭───────────────────────── Traceback (most recent call last) ─────────────────────────╮
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:202 in _get_lines                                                                 │
│                                                                                     │
│   199 │   def _get_lines(self) -> Lines:                                            │
│   200 │   │   """Get segment lines to render the widget."""                         │
│   201 │   │   if self.render_cache is None:                                         │
│ ❱ 202 │   │   │   self.render_lines()                                               │
│   203 │   │   assert self.render_cache is not None                                  │
│   204 │   │   lines = self.render_cache.lines                                       │
│   205 │   │   return lines                                                          │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:188 in render_lines                                                               │
│                                                                                     │
│   185 │                                                                             │
│   186 │   def render_lines(self) -> None:                                           │
│   187 │   │   width, height = self.size                                             │
│ ❱ 188 │   │   renderable = self.render_styled()                                     │
│   189 │   │   options = self.console.options.update_dimensions(width, height)       │
│   190 │   │   lines = self.console.render_lines(renderable, options)                │
│   191 │   │   self.render_cache = RenderCache(self.size, lines)                     │
│                                                                                     │
│ ╭────────── locals ──────────╮                                                      │
│ │ height = 13                │                                                      │
│ │   self = CPU(name='CPU#1') │                                                      │
│ │  width = 87                │                                                      │
│ ╰────────────────────────────╯                                                      │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:128 in render_styled                                                              │
│                                                                                     │
│   125 │   │   Returns:                                                              │
│   126 │   │   │   RenderableType: A new renderable.                                 │
│   127 │   │   """                                                                   │
│ ❱ 128 │   │   renderable = self.render()                                            │
│   129 │   │   if self.padding is not None:                                          │
│   130 │   │   │   renderable = Padding(renderable, self.padding)                    │
│   131 │   │   if self.border in self.BOX_MAP:                                       │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/tiptop/_cpu.py:2 │
│ 20 in render                                                                        │
│                                                                                     │
│   217 │                                                                             │
│   218 │   def render(self):                                                         │
│   219 │   │   if self.is_first_render:                                              │
│ ❱ 220 │   │   │   self.collect_data()                                               │
│   221 │   │   │   self.is_first_render = False                                      │
│   222 │   │   return self.panel                                                     │
│   223                                                                               │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/tiptop/_cpu.py:1 │
│ 19 in collect_data                                                                  │
│                                                                                     │
│   116 │   │   │   stream.add_value(load)                                            │
│   117 │   │                                                                         │
│   118 │   │   # CPU temperatures                                                    │
│ ❱ 119 │   │   temps = psutil.sensors_temperatures()                                 │
│   120 │   │   if self.has_cpu_temp:                                                 │
│   121 │   │   │   assert self.tempkey is not None                                   │
│   122 │   │   │   self.temp_total_stream.add_value(temps[self.tempkey][0].current)  │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │            load = 0.0                                                           │ │
│ │ load_per_thread = [                                                             │ │
│ │                   │   25.2,                                                     │ │
│ │                   │   0.0,                                                      │ │
│ │                   │   24.2,                                                     │ │
│ │                   │   0.0,                                                      │ │
│ │                   │   22.1,                                                     │ │
│ │                   │   0.0,                                                      │ │
│ │                   │   14.4,                                                     │ │
│ │                   │   0.0,                                                      │ │
│ │                   │   5.3,                                                      │ │
│ │                   │   0.0,                                                      │ │
│ │                   │   ... +2                                                    │ │
│ │                   ]                                                             │ │
│ │            self = CPU(name='CPU#1')                                             │ │
│ │          stream = <tiptop.braille_stream.BrailleStream object at 0x10d7e6580>   │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: module 'psutil' has no attribute 'sensors_temperatures'
╭───────────────────────── Traceback (most recent call last) ─────────────────────────╮
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:202 in _get_lines                                                                 │
│                                                                                     │
│   199 │   def _get_lines(self) -> Lines:                                            │
│   200 │   │   """Get segment lines to render the widget."""                         │
│   201 │   │   if self.render_cache is None:                                         │
│ ❱ 202 │   │   │   self.render_lines()                                               │
│   203 │   │   assert self.render_cache is not None                                  │
│   204 │   │   lines = self.render_cache.lines                                       │
│   205 │   │   return lines                                                          │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:188 in render_lines                                                               │
│                                                                                     │
│   185 │                                                                             │
│   186 │   def render_lines(self) -> None:                                           │
│   187 │   │   width, height = self.size                                             │
│ ❱ 188 │   │   renderable = self.render_styled()                                     │
│   189 │   │   options = self.console.options.update_dimensions(width, height)       │
│   190 │   │   lines = self.console.render_lines(renderable, options)                │
│   191 │   │   self.render_cache = RenderCache(self.size, lines)                     │
│                                                                                     │
│ ╭────────── locals ──────────╮                                                      │
│ │ height = 13                │                                                      │
│ │   self = CPU(name='CPU#1') │                                                      │
│ │  width = 87                │                                                      │
│ ╰────────────────────────────╯                                                      │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:128 in render_styled                                                              │
│                                                                                     │
│   125 │   │   Returns:                                                              │
│   126 │   │   │   RenderableType: A new renderable.                                 │
│   127 │   │   """                                                                   │
│ ❱ 128 │   │   renderable = self.render()                                            │
│   129 │   │   if self.padding is not None:                                          │
│   130 │   │   │   renderable = Padding(renderable, self.padding)                    │
│   131 │   │   if self.border in self.BOX_MAP:                                       │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/tiptop/_cpu.py:2 │
│ 20 in render                                                                        │
│                                                                                     │
│   217 │                                                                             │
│   218 │   def render(self):                                                         │
│   219 │   │   if self.is_first_render:                                              │
│ ❱ 220 │   │   │   self.collect_data()                                               │
│   221 │   │   │   self.is_first_render = False                                      │
│   222 │   │   return self.panel                                                     │
│   223                                                                               │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/tiptop/_cpu.py:1 │
│ 19 in collect_data                                                                  │
│                                                                                     │
│   116 │   │   │   stream.add_value(load)                                            │
│   117 │   │                                                                         │
│   118 │   │   # CPU temperatures                                                    │
│ ❱ 119 │   │   temps = psutil.sensors_temperatures()                                 │
│   120 │   │   if self.has_cpu_temp:                                                 │
│   121 │   │   │   assert self.tempkey is not None                                   │
│   122 │   │   │   self.temp_total_stream.add_value(temps[self.tempkey][0].current)  │
│                                                                                     │
│ ╭─────────────────────────────────── locals ────────────────────────────────────╮   │
│ │            load = 0.0                                                         │   │
│ │ load_per_thread = [0.0, 0.0, 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... +2] │   │
│ │            self = CPU(name='CPU#1')                                           │   │
│ │          stream = <tiptop.braille_stream.BrailleStream object at 0x10d7e6580> │   │
│ ╰───────────────────────────────────────────────────────────────────────────────╯   │
╰─────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: module 'psutil' has no attribute 'sensors_temperatures'
╭───────────────────────── Traceback (most recent call last) ─────────────────────────╮
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:202 in _get_lines                                                                 │
│                                                                                     │
│   199 │   def _get_lines(self) -> Lines:                                            │
│   200 │   │   """Get segment lines to render the widget."""                         │
│   201 │   │   if self.render_cache is None:                                         │
│ ❱ 202 │   │   │   self.render_lines()                                               │
│   203 │   │   assert self.render_cache is not None                                  │
│   204 │   │   lines = self.render_cache.lines                                       │
│   205 │   │   return lines                                                          │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:188 in render_lines                                                               │
│                                                                                     │
│   185 │                                                                             │
│   186 │   def render_lines(self) -> None:                                           │
│   187 │   │   width, height = self.size                                             │
│ ❱ 188 │   │   renderable = self.render_styled()                                     │
│   189 │   │   options = self.console.options.update_dimensions(width, height)       │
│   190 │   │   lines = self.console.render_lines(renderable, options)                │
│   191 │   │   self.render_cache = RenderCache(self.size, lines)                     │
│                                                                                     │
│ ╭────────── locals ──────────╮                                                      │
│ │ height = 13                │                                                      │
│ │   self = CPU(name='CPU#1') │                                                      │
│ │  width = 87                │                                                      │
│ ╰────────────────────────────╯                                                      │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/textual/widget.p │
│ y:128 in render_styled                                                              │
│                                                                                     │
│   125 │   │   Returns:                                                              │
│   126 │   │   │   RenderableType: A new renderable.                                 │
│   127 │   │   """                                                                   │
│ ❱ 128 │   │   renderable = self.render()                                            │
│   129 │   │   if self.padding is not None:                                          │
│   130 │   │   │   renderable = Padding(renderable, self.padding)                    │
│   131 │   │   if self.border in self.BOX_MAP:                                       │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/tiptop/_cpu.py:2 │
│ 20 in render                                                                        │
│                                                                                     │
│   217 │                                                                             │
│   218 │   def render(self):                                                         │
│   219 │   │   if self.is_first_render:                                              │
│ ❱ 220 │   │   │   self.collect_data()                                               │
│   221 │   │   │   self.is_first_render = False                                      │
│   222 │   │   return self.panel                                                     │
│   223                                                                               │
│                                                                                     │
│ ╭───────── locals ─────────╮                                                        │
│ │ self = CPU(name='CPU#1') │                                                        │
│ ╰──────────────────────────╯                                                        │
│                                                                                     │
│ /Users/leroyv/.local/pipx/venvs/tiptop/lib/python3.9/site-packages/tiptop/_cpu.py:1 │
│ 19 in collect_data                                                                  │
│                                                                                     │
│   116 │   │   │   stream.add_value(load)                                            │
│   117 │   │                                                                         │
│   118 │   │   # CPU temperatures                                                    │
│ ❱ 119 │   │   temps = psutil.sensors_temperatures()                                 │
│   120 │   │   if self.has_cpu_temp:                                                 │
│   121 │   │   │   assert self.tempkey is not None                                   │
│   122 │   │   │   self.temp_total_stream.add_value(temps[self.tempkey][0].current)  │
│                                                                                     │
│ ╭──────────────────────────────────── locals ─────────────────────────────────────╮ │
│ │            load = 0.0                                                           │ │
│ │ load_per_thread = [25.0, 0.0, 50.0, 0.0, 25.0, 0.0, 0.0, 0.0, 0.0, 0.0, ... +2] │ │
│ │            self = CPU(name='CPU#1')                                             │ │
│ │          stream = <tiptop.braille_stream.BrailleStream object at 0x10d7e6580>   │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: module 'psutil' has no attribute 'sensors_temperatures'

Configuration

  • Machine: Mac mini (2018)
  • OS: macOS Monterey 12.0.1 (21A559)
  • Python 3.9 (Homebrew, running the app installed with pipx)

You're using an outdated version of tiptop.

AFAIK I'm using the latest packaged version (0.0.13):

➜ pipx list
...
   package tiptop 0.0.13, Python 3.9.7
    - tiptop

Just to be sure, I also tried using the latest commit on main and got the same outcome.

I'm sorry, now I see it.