Manual install on ubuntu server 20.04

What is the problem?

I have ubuntu server 20.04 installed on a intel nuc that I want to install octoprint on to give it a little bit more horsepower for rendering octolapses taken from a DSLR. I follow the steps listed under installing manually (OctoPrint.org - Download & Setup OctoPrint) and get nothing but errors when I get to "pip install OctoPrint"

What did you already try to solve it?

Searched the forums, youtube, and reddit for a fix.

Complete Logs

octoprint.log, serial.log or output on terminal tab at a minimum, browser error console if UI issue ... no logs, no support! Not log excerpts, complete logs.)

Haven't gotten installed yet, so no logs :confused:

Additional information about your setup

OctoPrint version, OctoPi version, printer, firmware, browser, operating system, ... as much data as possible

Ender 3 pro
Marlin 2.0
Chrome
Ubuntu Server 20.04

Here is everything I get after running the "pip install OctoPrint" command:

root@octonuc:/# OctoPrint/bin/pip install OctoPrint
Collecting OctoPrint
  Downloading OctoPrint-1.4.0-py2.py3-none-any.whl (3.3 MB)
     |████████████████████████████████| 3.3 MB 1.2 MB/s
Collecting Jinja2<2.9,>=2.8.1
  Downloading Jinja2-2.8.1-py2.py3-none-any.whl (264 kB)
     |████████████████████████████████| 264 kB 76.2 MB/s
Collecting feedparser<5.3,>=5.2.1
  Downloading feedparser-5.2.1.tar.bz2 (192 kB)
     |████████████████████████████████| 192 kB 52.0 MB/s
Collecting pyserial<3.5,>=3.4
  Downloading pyserial-3.4-py2.py3-none-any.whl (193 kB)
     |████████████████████████████████| 193 kB 42.0 MB/s
Collecting pylru<1.3,>=1.2
  Downloading pylru-1.2.0.tar.gz (18 kB)
Collecting flask<0.13,>=0.12
  Downloading Flask-0.12.5-py2.py3-none-any.whl (81 kB)
     |████████████████████████████████| 81 kB 16.8 MB/s
Collecting future<0.19,>=0.18.2
  Downloading future-0.18.2.tar.gz (829 kB)
     |████████████████████████████████| 829 kB 33.6 MB/s
Collecting regex!=2018.11.6
  Downloading regex-2020.7.14-cp38-cp38-manylinux2010_x86_64.whl (672 kB)
     |████████████████████████████████| 672 kB 74.7 MB/s
Collecting cachelib<0.2,>=0.1
  Downloading cachelib-0.1.1-py3-none-any.whl (13 kB)
Collecting blinker<1.5,>=1.4
  Downloading blinker-1.4.tar.gz (111 kB)
     |████████████████████████████████| 111 kB 20.4 MB/s
Collecting tornado==4.5.3
  Downloading tornado-4.5.3.tar.gz (484 kB)
     |████████████████████████████████| 484 kB 88.8 MB/s
Collecting PyYAML<6,>=5.1
  Downloading PyYAML-5.3.1.tar.gz (269 kB)
     |████████████████████████████████| 269 kB 86.6 MB/s
Collecting filetype<2,>=1.0.5
  Downloading filetype-1.0.7-py2.py3-none-any.whl (15 kB)
Collecting netaddr<0.8,>=0.7.19
  Downloading netaddr-0.7.20-py2.py3-none-any.whl (1.9 MB)
     |████████████████████████████████| 1.9 MB 64.2 MB/s
Collecting awesome-slugify<1.7,>=1.6.5
  Downloading awesome-slugify-1.6.5.tar.gz (8.4 kB)
Requirement already satisfied: requests<3,>=2.22.0 in /OctoPrint/lib/python3.8/site-packages (from OctoPrint) (2.22.0)
Collecting Flask-Assets<0.13,>=0.12
  Downloading Flask-Assets-0.12.tar.gz (22 kB)
Collecting werkzeug<0.17,>=0.16
  Downloading Werkzeug-0.16.1-py2.py3-none-any.whl (327 kB)
     |████████████████████████████████| 327 kB 101.6 MB/s
Collecting websocket-client<0.57,>=0.56
  Downloading websocket_client-0.56.0-py2.py3-none-any.whl (200 kB)
     |████████████████████████████████| 200 kB 79.7 MB/s
Collecting wrapt<1.12,>=1.11.2
  Downloading wrapt-1.11.2.tar.gz (27 kB)
Collecting psutil<5.7,>=5.6.5
  Downloading psutil-5.6.7.tar.gz (448 kB)
     |████████████████████████████████| 448 kB 47.2 MB/s
Collecting markdown<3.2,>=3.1
  Downloading Markdown-3.1.1-py2.py3-none-any.whl (87 kB)
     |████████████████████████████████| 87 kB 11.1 MB/s
Collecting netifaces<0.11,>=0.10.9
  Downloading netifaces-0.10.9.tar.gz (28 kB)
Collecting semantic-version<2.9,>=2.8
  Downloading semantic_version-2.8.5-py2.py3-none-any.whl (15 kB)
Collecting pkginfo<1.6,>=1.5.0.1
  Downloading pkginfo-1.5.0.1-py2.py3-none-any.whl (25 kB)
Collecting Click<8,>=7
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 2.2 MB/s
Collecting Flask-Login<0.5,>=0.4.1
  Downloading Flask-Login-0.4.1.tar.gz (14 kB)
Collecting frozendict<1.3,>=1.2
  Downloading frozendict-1.2.tar.gz (2.6 kB)
Collecting emoji<0.6,>=0.5.4
  Downloading emoji-0.5.4.tar.gz (43 kB)
     |████████████████████████████████| 43 kB 1.6 MB/s
Collecting watchdog<0.10,>=0.9.0
  Downloading watchdog-0.9.0.tar.gz (85 kB)
     |████████████████████████████████| 85 kB 5.5 MB/s
Collecting Flask-Babel<0.13,>=0.12
  Downloading Flask-Babel-0.12.2.tar.gz (44 kB)
     |████████████████████████████████| 44 kB 3.4 MB/s
Collecting sentry-sdk==0.13.2
  Downloading sentry_sdk-0.13.2-py2.py3-none-any.whl (91 kB)
     |████████████████████████████████| 91 kB 15.0 MB/s
Collecting sarge==0.1.5post0
  Downloading sarge-0.1.5.post0.tar.gz (17 kB)
Collecting rsa<5,>=4.0
  Downloading rsa-4.6-py3-none-any.whl (47 kB)
     |████████████████████████████████| 47 kB 6.0 MB/s
Collecting MarkupSafe
  Downloading MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl (32 kB)
Collecting itsdangerous>=0.21
  Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Unidecode<0.05,>=0.04.14
  Downloading Unidecode-0.04.21-py2.py3-none-any.whl (228 kB)
     |████████████████████████████████| 228 kB 50.3 MB/s
Collecting webassets>=0.11.1
  Downloading webassets-2.0-py3-none-any.whl (142 kB)
     |████████████████████████████████| 142 kB 70.1 MB/s
Requirement already satisfied: six in /OctoPrint/lib/python3.8/site-packages (from websocket-client<0.57,>=0.56->OctoPrint) (1.14.0)
Requirement already satisfied: setuptools>=36 in /OctoPrint/lib/python3.8/site-packages (from markdown<3.2,>=3.1->OctoPrint) (44.0.0)
Collecting argh>=0.24.1
  Downloading argh-0.26.2-py2.py3-none-any.whl (30 kB)
Collecting pathtools>=0.1.1
  Downloading pathtools-0.1.2.tar.gz (11 kB)
Collecting Babel>=2.3
  Downloading Babel-2.8.0-py2.py3-none-any.whl (8.6 MB)
     |████████████████████████████████| 8.6 MB 60.2 MB/s
Requirement already satisfied: urllib3>=1.10.0 in /OctoPrint/lib/python3.8/site-packages (from sentry-sdk==0.13.2->OctoPrint) (1.25.8)
Requirement already satisfied: certifi in /OctoPrint/lib/python3.8/site-packages (from sentry-sdk==0.13.2->OctoPrint) (2019.11.28)
Collecting pyasn1>=0.1.3
  Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
     |████████████████████████████████| 77 kB 8.9 MB/s
Collecting pytz>=2015.7
  Downloading pytz-2020.1-py2.py3-none-any.whl (510 kB)
     |████████████████████████████████| 510 kB 73.3 MB/s
Building wheels for collected packages: feedparser, pylru, future, blinker, tornado, PyYAML, awesome-slugify, Flask-Assets, wrapt, psutil, netifaces, Flask-Login, frozendict, emoji, watchdog, Flask-Babel, sarge, pathtools
  Building wheel for feedparser (setup.py) ... done
  Created wheel for feedparser: filename=feedparser-5.2.1-py3-none-any.whl size=44939 sha256=08b2d306d141cc36ac8c76fbc0dc067c686562a2c554365c3219a381270790cb
  Stored in directory: /root/.cache/pip/wheels/e8/a3/00/a2395422ba648d592d20ba9b94e7bfcc36c8cf3b5ebdd472fb
  Building wheel for pylru (setup.py) ... done
  Created wheel for pylru: filename=pylru-1.2.0-py3-none-any.whl size=15691 sha256=f49d11e3aa8a91dabfd6587c23c5257c9f2eb9e1e9eaf76d34088b4b1a429301
  Stored in directory: /root/.cache/pip/wheels/e2/7c/82/ffc1d36a8a917ca378e8d2fb222e0e49da0427d76c23aaaa66
  Building wheel for future (setup.py) ... done
  Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491058 sha256=8fc274385fcbd88d6a3e2fbcee02b9f6063f928f563b62bafb3e30adf467b155
  Stored in directory: /root/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4
  Building wheel for blinker (setup.py) ... done
  Created wheel for blinker: filename=blinker-1.4-py3-none-any.whl size=13452 sha256=b72f417ffc1bca47455a5ad5bdb0e97b128f4d56b49c89f92af3c40b6a404118
  Stored in directory: /root/.cache/pip/wheels/b7/a5/68/fe632054a5eadd531c7a49d740c50eb6adfbeca822b4eab8d4
  Building wheel for tornado (setup.py) ... done
  Created wheel for tornado: filename=tornado-4.5.3-cp38-cp38-linux_x86_64.whl size=420776 sha256=d3ef7c5012d7c7da869fcdb96809646f1c1b6bec675f289ab3fc90df82bb8c60
  Stored in directory: /root/.cache/pip/wheels/20/fe/26/0c03adccd0cec2744261ec6b8380fbe5e726d1ea4cf3a9370e
  Building wheel for PyYAML (setup.py) ... done
  Created wheel for PyYAML: filename=PyYAML-5.3.1-cp38-cp38-linux_x86_64.whl size=44617 sha256=080009a2332a3da742c1e7368e3802f423f566488bcb4e4ecc7d5012a1926dc0
  Stored in directory: /root/.cache/pip/wheels/13/90/db/290ab3a34f2ef0b5a0f89235dc2d40fea83e77de84ed2dc05c
  Building wheel for awesome-slugify (setup.py) ... done
  Created wheel for awesome-slugify: filename=awesome_slugify-1.6.5-py3-none-any.whl size=8353 sha256=4a0741656cda5d91dc077a1466b98167060d24ba8fd80b49f702042eed76c91b
  Stored in directory: /root/.cache/pip/wheels/11/27/6f/56a2607c9f8010991f9e8f42c6bc8a90917291b4e1ead4582a
  Building wheel for Flask-Assets (setup.py) ... done
  Created wheel for Flask-Assets: filename=Flask_Assets-0.12-py3-none-any.whl size=8471 sha256=8da85941cc2cad2ea340b9fca7257eec0e3505d861316ce7967e19ca5993cd4e
  Stored in directory: /root/.cache/pip/wheels/38/be/87/23900db2a32b1826bf3acd92c3d2e019b91cd659e2a8668e42
  Building wheel for wrapt (setup.py) ... done
  Created wheel for wrapt: filename=wrapt-1.11.2-py3-none-any.whl size=19590 sha256=c6b83de462c3f1b437ec46e4604f2256bd895c345d5e887dda25f29808042619
  Stored in directory: /root/.cache/pip/wheels/52/25/16/7e228f52ee876e9c9c66dfd6eaf6fb2f73f18629a74dcf7045
  Building wheel for psutil (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /OctoPrint/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nq6abzs7/psutil/setup.py'"'"'; __file__='"'"'/tmp/pip-install-nq6abzs7/psutil/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-822qwsek
       cwd: /tmp/pip-install-nq6abzs7/psutil/
  Complete output (41 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.8
  creating build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pslinux.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_common.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pssunos.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psposix.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pswindows.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psbsd.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/__init__.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psaix.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_compat.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psosx.py -> build/lib.linux-x86_64-3.8/psutil
  creating build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_windows.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_linux.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_memory_leaks.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/runner.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_contracts.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_bsd.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_system.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_unicode.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_process.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_posix.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_connections.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_osx.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/__init__.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_misc.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/__main__.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_sunos.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_aix.py -> build/lib.linux-x86_64-3.8/psutil/tests
  running build_ext
  building 'psutil._psutil_linux' extension
  creating build/temp.linux-x86_64-3.8
  creating build/temp.linux-x86_64-3.8/psutil
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=567 -DPSUTIL_LINUX=1 -DPSUTIL_ETHTOOL_MISSING_TYPES=1 -I/OctoPrint/include -I/usr/include/python3.8 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-3.8/psutil/_psutil_common.o
  unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for psutil
  Running setup.py clean for psutil
  Building wheel for netifaces (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /OctoPrint/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nq6abzs7/netifaces/setup.py'"'"'; __file__='"'"'/tmp/pip-install-nq6abzs7/netifaces/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-wfskhhxw
       cwd: /tmp/pip-install-nq6abzs7/netifaces/
  Complete output (16 lines):
  running bdist_wheel
  running build
  running build_ext
  checking for getifaddrs...not found.
  checking for getnameinfo...not found.
  checking for socket IOCTLs...not found.
  checking for optional header files...none found.
  checking whether struct sockaddr has a length field...no.
  checking which sockaddr_xxx structs are defined...none!
  checking for routing socket support...no.
  checking for sysctl(CTL_NET...) support...no.
  checking for netlink support...no.
  building 'netifaces' extension
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DNETIFACES_VERSION=0.10.9 -I/OctoPrint/include -I/usr/include/python3.8 -c netifaces.c -o build/temp.linux-x86_64-3.8/netifaces.o
  unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for netifaces
  Running setup.py clean for netifaces
  Building wheel for Flask-Login (setup.py) ... done
  Created wheel for Flask-Login: filename=Flask_Login-0.4.1-py2.py3-none-any.whl size=15935 sha256=9c7fbcf0760c21292c434823b42d1ff3377d05faa86df819822cb5f18c005ca1
  Stored in directory: /root/.cache/pip/wheels/ec/8e/42/16110a8b4f17e4ef4bd0abd42969fc1fc38229348de9f071df
  Building wheel for frozendict (setup.py) ... done
  Created wheel for frozendict: filename=frozendict-1.2-py3-none-any.whl size=3148 sha256=644d177d2defbaaaef23ce713824039501c823704bc1d3d3977511e9cc23a181
  Stored in directory: /root/.cache/pip/wheels/9b/9b/56/5713233cf7226423ab6c58c08081551a301b5863e343ba053c
  Building wheel for emoji (setup.py) ... done
  Created wheel for emoji: filename=emoji-0.5.4-py3-none-any.whl size=42170 sha256=628fb4fdb75df224568d52a70c44bd6f96614e30c0bb1db0b3a4774b16656325
  Stored in directory: /root/.cache/pip/wheels/22/d2/67/010d63edb25b9f0e7d5c181a4b77d9bdc9e027eb5562c4cc1d
  Building wheel for watchdog (setup.py) ... done
  Created wheel for watchdog: filename=watchdog-0.9.0-py3-none-any.whl size=73652 sha256=56e0903d8cb29aa5cafa29d7b2f09c81c85b9da96684be08aac16a9b3aef4100
  Stored in directory: /root/.cache/pip/wheels/88/53/5f/7fcb55d6c6500fa974c3228b5deb75c7522c192522b3ec4ff3
  Building wheel for Flask-Babel (setup.py) ... done
  Created wheel for Flask-Babel: filename=Flask_Babel-0.12.2-py3-none-any.whl size=9266 sha256=438b69bf43164ae736d6d3f2c400fd3d0000790f3cf1522f5410b8c1fee09ef5
  Stored in directory: /root/.cache/pip/wheels/a7/28/aa/e00e62f65f664bb1ddec3594eaf4ff952a3ffff3b4d75ed88b
  Building wheel for sarge (setup.py) ... done
  Created wheel for sarge: filename=sarge-0.1.5.post0-py3-none-any.whl size=18870 sha256=9156faf163edd5a0e6b19878d05128db61a876a5548f1d754b47ae87869ba5e9
  Stored in directory: /root/.cache/pip/wheels/5a/9a/08/3032c8c58cadc2658cd2c7198421381216a0e44dec2bae172e
  Building wheel for pathtools (setup.py) ... done
  Created wheel for pathtools: filename=pathtools-0.1.2-py3-none-any.whl size=8784 sha256=d68384632e33ad9ab4df096ff301db379a64fddba2ae0733c4fe06b7d8e6db58
  Stored in directory: /root/.cache/pip/wheels/4c/8e/7e/72fbc243e1aeecae64a96875432e70d4e92f3d2d18123be004
Successfully built feedparser pylru future blinker tornado PyYAML awesome-slugify Flask-Assets wrapt Flask-Login frozendict emoji watchdog Flask-Babel sarge pathtools
Failed to build psutil netifaces
Installing collected packages: MarkupSafe, Jinja2, feedparser, pyserial, pylru, itsdangerous, werkzeug, Click, flask, future, regex, cachelib, blinker, tornado, PyYAML, filetype, netaddr, Unidecode, awesome-slugify, webassets, Flask-Assets, websocket-client, wrapt, psutil, markdown, netifaces, semantic-version, pkginfo, Flask-Login, frozendict, emoji, argh, pathtools, watchdog, pytz, Babel, Flask-Babel, sentry-sdk, sarge, pyasn1, rsa, OctoPrint
    Running setup.py install for psutil ... error
    ERROR: Command errored out with exit status 1:
     command: /OctoPrint/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nq6abzs7/psutil/setup.py'"'"'; __file__='"'"'/tmp/pip-install-nq6abzs7/psutil/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-record-1a_aeku_/install-record.txt --single-version-externally-managed --compile --install-headers /OctoPrint/include/site/python3.8/psutil
         cwd: /tmp/pip-install-nq6abzs7/psutil/
    Complete output (41 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.8
    creating build/lib.linux-x86_64-3.8/psutil
    copying psutil/_pslinux.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_common.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_pssunos.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_psposix.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_pswindows.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_psbsd.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/__init__.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_psaix.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_compat.py -> build/lib.linux-x86_64-3.8/psutil
    copying psutil/_psosx.py -> build/lib.linux-x86_64-3.8/psutil
    creating build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_windows.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_linux.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_memory_leaks.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/runner.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_contracts.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_bsd.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_system.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_unicode.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_process.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_posix.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_connections.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_osx.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/__init__.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_misc.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/__main__.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_sunos.py -> build/lib.linux-x86_64-3.8/psutil/tests
    copying psutil/tests/test_aix.py -> build/lib.linux-x86_64-3.8/psutil/tests
    running build_ext
    building 'psutil._psutil_linux' extension
    creating build/temp.linux-x86_64-3.8
    creating build/temp.linux-x86_64-3.8/psutil
    x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=567 -DPSUTIL_LINUX=1 -DPSUTIL_ETHTOOL_MISSING_TYPES=1 -I/OctoPrint/include -I/usr/include/python3.8 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-3.8/psutil/_psutil_common.o
    unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /OctoPrint/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nq6abzs7/psutil/setup.py'"'"'; __file__='"'"'/tmp/pip-install-nq6abzs7/psutil/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-record-1a_aeku_/install-record.txt --single-version-externally-managed --compile --install-headers /OctoPrint/include/site/python3.8/psutil Check the logs for full command output.
root@octonuc:/#

I think you didn't activate the venv.

Try it with this guide


(ignore the pi parts and use your username instead)

Tried that as well. Just tried again though and get the following after I run the install command. Almost seems like there may be something wrong with the pip script.

(venv) aaron@octonuc:~/OctoPrint$ pip install octoprint
Collecting octoprint
  Downloading OctoPrint-1.4.0-py2.py3-none-any.whl (3.3 MB)
     |████████████████████████████████| 3.3 MB 1.2 MB/s
Collecting Jinja2<2.9,>=2.8.1
  Downloading Jinja2-2.8.1-py2.py3-none-any.whl (264 kB)
     |████████████████████████████████| 264 kB 74.7 MB/s
Collecting netaddr<0.8,>=0.7.19
  Downloading netaddr-0.7.20-py2.py3-none-any.whl (1.9 MB)
     |████████████████████████████████| 1.9 MB 12.5 MB/s
Collecting rsa<5,>=4.0
  Downloading rsa-4.6-py3-none-any.whl (47 kB)
     |████████████████████████████████| 47 kB 7.6 MB/s
Collecting Flask-Assets<0.13,>=0.12
  Downloading Flask-Assets-0.12.tar.gz (22 kB)
Collecting pyserial<3.5,>=3.4
  Downloading pyserial-3.4-py2.py3-none-any.whl (193 kB)
     |████████████████████████████████| 193 kB 29.5 MB/s
Collecting tornado==4.5.3
  Downloading tornado-4.5.3.tar.gz (484 kB)
     |████████████████████████████████| 484 kB 74.2 MB/s
Collecting markdown<3.2,>=3.1
  Downloading Markdown-3.1.1-py2.py3-none-any.whl (87 kB)
     |████████████████████████████████| 87 kB 8.4 MB/s
Collecting emoji<0.6,>=0.5.4
  Downloading emoji-0.5.4.tar.gz (43 kB)
     |████████████████████████████████| 43 kB 2.9 MB/s
Collecting websocket-client<0.57,>=0.56
  Downloading websocket_client-0.56.0-py2.py3-none-any.whl (200 kB)
     |████████████████████████████████| 200 kB 47.7 MB/s
Collecting pylru<1.3,>=1.2
  Downloading pylru-1.2.0.tar.gz (18 kB)
Collecting awesome-slugify<1.7,>=1.6.5
  Downloading awesome-slugify-1.6.5.tar.gz (8.4 kB)
Collecting flask<0.13,>=0.12
  Downloading Flask-0.12.5-py2.py3-none-any.whl (81 kB)
     |████████████████████████████████| 81 kB 13.2 MB/s
Collecting netifaces<0.11,>=0.10.9
  Downloading netifaces-0.10.9.tar.gz (28 kB)
Collecting future<0.19,>=0.18.2
  Downloading future-0.18.2.tar.gz (829 kB)
     |████████████████████████████████| 829 kB 54.8 MB/s
Requirement already satisfied: requests<3,>=2.22.0 in ./venv/lib/python3.8/site-packages (from octoprint) (2.22.0)
Collecting Click<8,>=7
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 857 kB/s
Collecting wrapt<1.12,>=1.11.2
  Downloading wrapt-1.11.2.tar.gz (27 kB)
Collecting PyYAML<6,>=5.1
  Downloading PyYAML-5.3.1.tar.gz (269 kB)
     |████████████████████████████████| 269 kB 71.9 MB/s
Collecting frozendict<1.3,>=1.2
  Downloading frozendict-1.2.tar.gz (2.6 kB)
Collecting Flask-Login<0.5,>=0.4.1
  Downloading Flask-Login-0.4.1.tar.gz (14 kB)
Collecting regex!=2018.11.6
  Downloading regex-2020.7.14-cp38-cp38-manylinux2010_x86_64.whl (672 kB)
     |████████████████████████████████| 672 kB 55.3 MB/s
Collecting Flask-Babel<0.13,>=0.12
  Downloading Flask-Babel-0.12.2.tar.gz (44 kB)
     |████████████████████████████████| 44 kB 4.3 MB/s
Collecting blinker<1.5,>=1.4
  Downloading blinker-1.4.tar.gz (111 kB)
     |████████████████████████████████| 111 kB 26.8 MB/s
Collecting semantic-version<2.9,>=2.8
  Downloading semantic_version-2.8.5-py2.py3-none-any.whl (15 kB)
Collecting pkginfo<1.6,>=1.5.0.1
  Downloading pkginfo-1.5.0.1-py2.py3-none-any.whl (25 kB)
Collecting feedparser<5.3,>=5.2.1
  Downloading feedparser-5.2.1.tar.bz2 (192 kB)
     |████████████████████████████████| 192 kB 28.6 MB/s
Collecting watchdog<0.10,>=0.9.0
  Downloading watchdog-0.9.0.tar.gz (85 kB)
     |████████████████████████████████| 85 kB 7.2 MB/s
Collecting filetype<2,>=1.0.5
  Downloading filetype-1.0.7-py2.py3-none-any.whl (15 kB)
Collecting sarge==0.1.5post0
  Downloading sarge-0.1.5.post0.tar.gz (17 kB)
Collecting cachelib<0.2,>=0.1
  Downloading cachelib-0.1.1-py3-none-any.whl (13 kB)
Collecting sentry-sdk==0.13.2
  Downloading sentry_sdk-0.13.2-py2.py3-none-any.whl (91 kB)
     |████████████████████████████████| 91 kB 13.3 MB/s
Collecting werkzeug<0.17,>=0.16
  Downloading Werkzeug-0.16.1-py2.py3-none-any.whl (327 kB)
     |████████████████████████████████| 327 kB 73.4 MB/s
Collecting psutil<5.7,>=5.6.5
  Downloading psutil-5.6.7.tar.gz (448 kB)
     |████████████████████████████████| 448 kB 48.8 MB/s
Collecting MarkupSafe
  Downloading MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl (32 kB)
Collecting pyasn1>=0.1.3
  Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
     |████████████████████████████████| 77 kB 8.5 MB/s
Collecting webassets>=0.11.1
  Downloading webassets-2.0-py3-none-any.whl (142 kB)
     |████████████████████████████████| 142 kB 43.4 MB/s
Requirement already satisfied: setuptools>=36 in ./venv/lib/python3.8/site-packages (from markdown<3.2,>=3.1->octoprint) (44.0.0)
Requirement already satisfied: six in ./venv/lib/python3.8/site-packages (from websocket-client<0.57,>=0.56->octoprint) (1.14.0)
Collecting Unidecode<0.05,>=0.04.14
  Downloading Unidecode-0.04.21-py2.py3-none-any.whl (228 kB)
     |████████████████████████████████| 228 kB 66.6 MB/s
Collecting itsdangerous>=0.21
  Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting Babel>=2.3
  Downloading Babel-2.8.0-py2.py3-none-any.whl (8.6 MB)
     |████████████████████████████████| 8.6 MB 52.5 MB/s
Collecting argh>=0.24.1
  Downloading argh-0.26.2-py2.py3-none-any.whl (30 kB)
Collecting pathtools>=0.1.1
  Downloading pathtools-0.1.2.tar.gz (11 kB)
Requirement already satisfied: certifi in ./venv/lib/python3.8/site-packages (from sentry-sdk==0.13.2->octoprint) (2019.11.28)
Requirement already satisfied: urllib3>=1.10.0 in ./venv/lib/python3.8/site-packages (from sentry-sdk==0.13.2->octoprint) (1.25.8)
Collecting pytz>=2015.7
  Downloading pytz-2020.1-py2.py3-none-any.whl (510 kB)
     |████████████████████████████████| 510 kB 70.0 MB/s
Building wheels for collected packages: Flask-Assets, tornado, emoji, pylru, awesome-slugify, netifaces, future, wrapt, PyYAML, frozendict, Flask-Login, Flask-Babel, blinker, feedparser, watchdog, sarge, psutil, pathtools
  Building wheel for Flask-Assets (setup.py) ... done
  Created wheel for Flask-Assets: filename=Flask_Assets-0.12-py3-none-any.whl size=8471 sha256=468171d3b7edaeb1fa2d867ce47236ced49a761c15347d8b86908ef67db88a8b
  Stored in directory: /home/aaron/.cache/pip/wheels/38/be/87/23900db2a32b1826bf3acd92c3d2e019b91cd659e2a8668e42
  Building wheel for tornado (setup.py) ... done
  Created wheel for tornado: filename=tornado-4.5.3-cp38-cp38-linux_x86_64.whl size=420776 sha256=b36e07c7c87408a4099a6f32342ed0ae23286dd53f2b3f513489b7eb8b34d1f7
  Stored in directory: /home/aaron/.cache/pip/wheels/20/fe/26/0c03adccd0cec2744261ec6b8380fbe5e726d1ea4cf3a9370e
  Building wheel for emoji (setup.py) ... done
  Created wheel for emoji: filename=emoji-0.5.4-py3-none-any.whl size=42170 sha256=0472422b18d51061e34b0fdd5acae99d5e7b8604943cd39a3e30a894069d2be1
  Stored in directory: /home/aaron/.cache/pip/wheels/22/d2/67/010d63edb25b9f0e7d5c181a4b77d9bdc9e027eb5562c4cc1d
  Building wheel for pylru (setup.py) ... done
  Created wheel for pylru: filename=pylru-1.2.0-py3-none-any.whl size=15691 sha256=a4505c8522104da4ae8994fd9242cfb3e4f9347b7993a757bb0f14e517473c27
  Stored in directory: /home/aaron/.cache/pip/wheels/e2/7c/82/ffc1d36a8a917ca378e8d2fb222e0e49da0427d76c23aaaa66
  Building wheel for awesome-slugify (setup.py) ... done
  Created wheel for awesome-slugify: filename=awesome_slugify-1.6.5-py3-none-any.whl size=8353 sha256=c854d285d76b911f9a07c41064fe01ba23eccacbddf87794098ee58fd19cfbd9
  Stored in directory: /home/aaron/.cache/pip/wheels/11/27/6f/56a2607c9f8010991f9e8f42c6bc8a90917291b4e1ead4582a
  Building wheel for netifaces (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7u3np06u/netifaces/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7u3np06u/netifaces/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-7g396yn_
       cwd: /tmp/pip-install-7u3np06u/netifaces/
  Complete output (20 lines):
  running bdist_wheel
  running build
  running build_ext
  checking for getifaddrs...found.
  checking for getnameinfo...found.
  checking for IPv6 socket IOCTLs...not found.
  checking for optional header files...netash/ash.h netatalk/at.h netax25/ax25.h neteconet/ec.h netipx/ipx.h netpacket/packet.h netrose/rose.h linux/atm.h linux/llc.h linux/tipc.h linux/dn.h.
  checking whether struct sockaddr has a length field...no.
  checking which sockaddr_xxx structs are defined...at ax25 in in6 ipx un rose ash ec ll atmpvc atmsvc dn llc.
  checking for routing socket support...no.
  checking for sysctl(CTL_NET...) support...no.
  checking for netlink support...yes.
  will use netlink to read routing table
  building 'netifaces' extension
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DNETIFACES_VERSION=0.10.9 -DHAVE_GETIFADDRS=1 -DHAVE_GETNAMEINFO=1 -DHAVE_NETASH_ASH_H=1 -DHAVE_NETATALK_AT_H=1 -DHAVE_NETAX25_AX25_H=1 -DHAVE_NETECONET_EC_H=1 -DHAVE_NETIPX_IPX_H=1 -DHAVE_NETPACKET_PACKET_H=1 -DHAVE_NETROSE_ROSE_H=1 -DHAVE_LINUX_ATM_H=1 -DHAVE_LINUX_LLC_H=1 -DHAVE_LINUX_TIPC_H=1 -DHAVE_LINUX_DN_H=1 -DHAVE_SOCKADDR_AT=1 -DHAVE_SOCKADDR_AX25=1 -DHAVE_SOCKADDR_IN=1 -DHAVE_SOCKADDR_IN6=1 -DHAVE_SOCKADDR_IPX=1 -DHAVE_SOCKADDR_UN=1 -DHAVE_SOCKADDR_ROSE=1 -DHAVE_SOCKADDR_ASH=1 -DHAVE_SOCKADDR_EC=1 -DHAVE_SOCKADDR_LL=1 -DHAVE_SOCKADDR_ATMPVC=1 -DHAVE_SOCKADDR_ATMSVC=1 -DHAVE_SOCKADDR_DN=1 -DHAVE_SOCKADDR_LLC=1 -DHAVE_PF_NETLINK=1 -I/home/aaron/OctoPrint/venv/include -I/usr/include/python3.8 -c netifaces.c -o build/temp.linux-x86_64-3.8/netifaces.o
  netifaces.c:1:10: fatal error: Python.h: No such file or directory
      1 | #include <Python.h>
        |          ^~~~~~~~~~
  compilation terminated.
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for netifaces
  Running setup.py clean for netifaces
  Building wheel for future (setup.py) ... done
  Created wheel for future: filename=future-0.18.2-py3-none-any.whl size=491058 sha256=8d9acdabbaeacad50670ba9f2ab2aedfc2e790f2aed1689a9c0c0f9156cd0122
  Stored in directory: /home/aaron/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4
  Building wheel for wrapt (setup.py) ... done
  Created wheel for wrapt: filename=wrapt-1.11.2-py3-none-any.whl size=19590 sha256=e3eba16bf3e6aaa1d3280448f22e32da4b9c81b731aa63ae745ccc20129bbb33
  Stored in directory: /home/aaron/.cache/pip/wheels/52/25/16/7e228f52ee876e9c9c66dfd6eaf6fb2f73f18629a74dcf7045
  Building wheel for PyYAML (setup.py) ... done
  Created wheel for PyYAML: filename=PyYAML-5.3.1-cp38-cp38-linux_x86_64.whl size=44617 sha256=73469ba62d7d44d21ae8621a5b22d610ef5b512f0b632dfbc9b142f8094e045c
  Stored in directory: /home/aaron/.cache/pip/wheels/13/90/db/290ab3a34f2ef0b5a0f89235dc2d40fea83e77de84ed2dc05c
  Building wheel for frozendict (setup.py) ... done
  Created wheel for frozendict: filename=frozendict-1.2-py3-none-any.whl size=3148 sha256=232b696dabbaf5bf2f477cd9b272f2cd17ec34d23b6b116177aa9f0cb28c9b6e
  Stored in directory: /home/aaron/.cache/pip/wheels/9b/9b/56/5713233cf7226423ab6c58c08081551a301b5863e343ba053c
  Building wheel for Flask-Login (setup.py) ... done
  Created wheel for Flask-Login: filename=Flask_Login-0.4.1-py2.py3-none-any.whl size=15935 sha256=898a03c10e31d8072174ee34aa43a7e256b374ed846903309feecf5542ba0fb7
  Stored in directory: /home/aaron/.cache/pip/wheels/ec/8e/42/16110a8b4f17e4ef4bd0abd42969fc1fc38229348de9f071df
  Building wheel for Flask-Babel (setup.py) ... done
  Created wheel for Flask-Babel: filename=Flask_Babel-0.12.2-py3-none-any.whl size=9266 sha256=a4a78ecfbf61d8ed5989c0bc0264b834ff6c93b2a909f281f91705ef7d3b79c1
  Stored in directory: /home/aaron/.cache/pip/wheels/a7/28/aa/e00e62f65f664bb1ddec3594eaf4ff952a3ffff3b4d75ed88b
  Building wheel for blinker (setup.py) ... done
  Created wheel for blinker: filename=blinker-1.4-py3-none-any.whl size=13452 sha256=e60caf1cdf82035ccee704222ee39928a58b7bd823563d2831a506b968a3fc11
  Stored in directory: /home/aaron/.cache/pip/wheels/b7/a5/68/fe632054a5eadd531c7a49d740c50eb6adfbeca822b4eab8d4
  Building wheel for feedparser (setup.py) ... done
  Created wheel for feedparser: filename=feedparser-5.2.1-py3-none-any.whl size=44939 sha256=58ce40f630133d5c58de55ab8e4cc63ad1ddb64f1a9d63255d23343611f66aae
  Stored in directory: /home/aaron/.cache/pip/wheels/e8/a3/00/a2395422ba648d592d20ba9b94e7bfcc36c8cf3b5ebdd472fb
  Building wheel for watchdog (setup.py) ... done
  Created wheel for watchdog: filename=watchdog-0.9.0-py3-none-any.whl size=73652 sha256=3a557cb6a00ad5432578ab1fec975cb69cc63d841777f5cd0bae35d0ae4300aa
  Stored in directory: /home/aaron/.cache/pip/wheels/88/53/5f/7fcb55d6c6500fa974c3228b5deb75c7522c192522b3ec4ff3
  Building wheel for sarge (setup.py) ... done
  Created wheel for sarge: filename=sarge-0.1.5.post0-py3-none-any.whl size=18870 sha256=701e2c010094bad8b105c8d2fec694ec00f674c6b35d5dde1c03a2a8dc44e6a2
  Stored in directory: /home/aaron/.cache/pip/wheels/5a/9a/08/3032c8c58cadc2658cd2c7198421381216a0e44dec2bae172e
  Building wheel for psutil (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7u3np06u/psutil/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7u3np06u/psutil/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-lp1axxp0
       cwd: /tmp/pip-install-7u3np06u/psutil/
  Complete output (44 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.8
  creating build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pslinux.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_common.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pssunos.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psposix.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pswindows.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psbsd.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/__init__.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psaix.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_compat.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psosx.py -> build/lib.linux-x86_64-3.8/psutil
  creating build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_windows.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_linux.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_memory_leaks.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/runner.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_contracts.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_bsd.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_system.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_unicode.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_process.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_posix.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_connections.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_osx.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/__init__.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_misc.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/__main__.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_sunos.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_aix.py -> build/lib.linux-x86_64-3.8/psutil/tests
  running build_ext
  building 'psutil._psutil_linux' extension
  creating build/temp.linux-x86_64-3.8
  creating build/temp.linux-x86_64-3.8/psutil
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=567 -DPSUTIL_LINUX=1 -I/home/aaron/OctoPrint/venv/include -I/usr/include/python3.8 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-3.8/psutil/_psutil_common.o
  psutil/_psutil_common.c:9:10: fatal error: Python.h: No such file or directory
      9 | #include <Python.h>
        |          ^~~~~~~~~~
  compilation terminated.
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for psutil
  Running setup.py clean for psutil
  Building wheel for pathtools (setup.py) ... done
  Created wheel for pathtools: filename=pathtools-0.1.2-py3-none-any.whl size=8784 sha256=e51ed3fd86b520e7437e77d8ac31a1338c965b165887b1579f36858c92afcb4f
  Stored in directory: /home/aaron/.cache/pip/wheels/4c/8e/7e/72fbc243e1aeecae64a96875432e70d4e92f3d2d18123be004
Successfully built Flask-Assets tornado emoji pylru awesome-slugify future wrapt PyYAML frozendict Flask-Login Flask-Babel blinker feedparser watchdog sarge pathtools
Failed to build netifaces psutil
Installing collected packages: MarkupSafe, Jinja2, netaddr, pyasn1, rsa, Click, itsdangerous, werkzeug, flask, webassets, Flask-Assets, pyserial, tornado, markdown, emoji, websocket-client, pylru, Unidecode, regex, awesome-slugify, netifaces, future, wrapt, PyYAML, frozendict, Flask-Login, pytz, Babel, Flask-Babel, blinker, semantic-version, pkginfo, feedparser, argh, pathtools, watchdog, filetype, sarge, cachelib, sentry-sdk, psutil, octoprint
    Running setup.py install for netifaces ... error
    ERROR: Command errored out with exit status 1:
     command: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7u3np06u/netifaces/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7u3np06u/netifaces/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-record-iijo1290/install-record.txt --single-version-externally-managed --compile --install-headers /home/aaron/OctoPrint/venv/include/site/python3.8/netifaces
         cwd: /tmp/pip-install-7u3np06u/netifaces/
    Complete output (20 lines):
    running install
    running build
    running build_ext
    checking for getifaddrs...found.
    checking for getnameinfo...found.
    checking for IPv6 socket IOCTLs...not found.
    checking for optional header files...netash/ash.h netatalk/at.h netax25/ax25.h neteconet/ec.h netipx/ipx.h netpacket/packet.h netrose/rose.h linux/atm.h linux/llc.h linux/tipc.h linux/dn.h.
    checking whether struct sockaddr has a length field...no.
    checking which sockaddr_xxx structs are defined...at ax25 in in6 ipx un rose ash ec ll atmpvc atmsvc dn llc.
    checking for routing socket support...no.
    checking for sysctl(CTL_NET...) support...no.
    checking for netlink support...yes.
    will use netlink to read routing table
    building 'netifaces' extension
    x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DNETIFACES_VERSION=0.10.9 -DHAVE_GETIFADDRS=1 -DHAVE_GETNAMEINFO=1 -DHAVE_NETASH_ASH_H=1 -DHAVE_NETATALK_AT_H=1 -DHAVE_NETAX25_AX25_H=1 -DHAVE_NETECONET_EC_H=1 -DHAVE_NETIPX_IPX_H=1 -DHAVE_NETPACKET_PACKET_H=1 -DHAVE_NETROSE_ROSE_H=1 -DHAVE_LINUX_ATM_H=1 -DHAVE_LINUX_LLC_H=1 -DHAVE_LINUX_TIPC_H=1 -DHAVE_LINUX_DN_H=1 -DHAVE_SOCKADDR_AT=1 -DHAVE_SOCKADDR_AX25=1 -DHAVE_SOCKADDR_IN=1 -DHAVE_SOCKADDR_IN6=1 -DHAVE_SOCKADDR_IPX=1 -DHAVE_SOCKADDR_UN=1 -DHAVE_SOCKADDR_ROSE=1 -DHAVE_SOCKADDR_ASH=1 -DHAVE_SOCKADDR_EC=1 -DHAVE_SOCKADDR_LL=1 -DHAVE_SOCKADDR_ATMPVC=1 -DHAVE_SOCKADDR_ATMSVC=1 -DHAVE_SOCKADDR_DN=1 -DHAVE_SOCKADDR_LLC=1 -DHAVE_PF_NETLINK=1 -I/home/aaron/OctoPrint/venv/include -I/usr/include/python3.8 -c netifaces.c -o build/temp.linux-x86_64-3.8/netifaces.o
    netifaces.c:1:10: fatal error: Python.h: No such file or directory
        1 | #include <Python.h>
          |          ^~~~~~~~~~
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-7u3np06u/netifaces/setup.py'"'"'; __file__='"'"'/tmp/pip-install-7u3np06u/netifaces/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-record-iijo1290/install-record.txt --single-version-externally-managed --compile --install-headers /home/aaron/OctoPrint/venv/include/site/python3.8/netifaces Check the logs for full command output.
(venv) aaron@octonuc:~/OctoPrint$

Have even tried the steps listed Here and get errors.

When I try to run ./venv/bin/pip install .

I get:

aaron@octonuc:~/OctoPrint$ ./venv/bin/pip install .
Processing /home/aaron/OctoPrint
Collecting Click<8,>=7
  Using cached click-7.1.2-py2.py3-none-any.whl (82 kB)
Processing /home/aaron/.cache/pip/wheels/38/be/87/23900db2a32b1826bf3acd92c3d2e019b91cd659e2a8668e42/Flask_Assets-0.12-py3-none-any.whl
Processing /home/aaron/.cache/pip/wheels/a7/28/aa/e00e62f65f664bb1ddec3594eaf4ff952a3ffff3b4d75ed88b/Flask_Babel-0.12.2-py3-none-any.whl
Processing /home/aaron/.cache/pip/wheels/ec/8e/42/16110a8b4f17e4ef4bd0abd42969fc1fc38229348de9f071df/Flask_Login-0.4.1-py2.py3-none-any.whl
Collecting Jinja2<2.9,>=2.8.1
  Using cached Jinja2-2.8.1-py2.py3-none-any.whl (264 kB)
Processing /home/aaron/.cache/pip/wheels/13/90/db/290ab3a34f2ef0b5a0f89235dc2d40fea83e77de84ed2dc05c/PyYAML-5.3.1-cp38-cp38-linux_x86_64.whl
Processing /home/aaron/.cache/pip/wheels/11/27/6f/56a2607c9f8010991f9e8f42c6bc8a90917291b4e1ead4582a/awesome_slugify-1.6.5-py3-none-any.whl
Processing /home/aaron/.cache/pip/wheels/b7/a5/68/fe632054a5eadd531c7a49d740c50eb6adfbeca822b4eab8d4/blinker-1.4-py3-none-any.whl
Collecting cachelib<0.2,>=0.1
  Using cached cachelib-0.1.1-py3-none-any.whl (13 kB)
Processing /home/aaron/.cache/pip/wheels/22/d2/67/010d63edb25b9f0e7d5c181a4b77d9bdc9e027eb5562c4cc1d/emoji-0.5.4-py3-none-any.whl
Processing /home/aaron/.cache/pip/wheels/e8/a3/00/a2395422ba648d592d20ba9b94e7bfcc36c8cf3b5ebdd472fb/feedparser-5.2.1-py3-none-any.whl
Collecting filetype<2,>=1.0.5
  Using cached filetype-1.0.7-py2.py3-none-any.whl (15 kB)
Collecting flask<0.13,>=0.12
  Using cached Flask-0.12.5-py2.py3-none-any.whl (81 kB)
Processing /home/aaron/.cache/pip/wheels/9b/9b/56/5713233cf7226423ab6c58c08081551a301b5863e343ba053c/frozendict-1.2-py3-none-any.whl
Processing /home/aaron/.cache/pip/wheels/8e/70/28/3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4/future-0.18.2-py3-none-any.whl
Collecting markdown<3.2,>=3.1
  Using cached Markdown-3.1.1-py2.py3-none-any.whl (87 kB)
Collecting netaddr<0.8,>=0.7.19
  Using cached netaddr-0.7.20-py2.py3-none-any.whl (1.9 MB)
Collecting netifaces<0.11,>=0.10.9
  Using cached netifaces-0.10.9.tar.gz (28 kB)
Collecting pkginfo<1.6,>=1.5.0.1
  Using cached pkginfo-1.5.0.1-py2.py3-none-any.whl (25 kB)
Collecting psutil<5.7,>=5.6.5
  Using cached psutil-5.6.7.tar.gz (448 kB)
Processing /home/aaron/.cache/pip/wheels/e2/7c/82/ffc1d36a8a917ca378e8d2fb222e0e49da0427d76c23aaaa66/pylru-1.2.0-py3-none-any.whl
Collecting pyserial<3.5,>=3.4
  Using cached pyserial-3.4-py2.py3-none-any.whl (193 kB)
Collecting regex!=2018.11.6
  Using cached regex-2020.7.14-cp38-cp38-manylinux2010_x86_64.whl (672 kB)
Requirement already satisfied: requests<3,>=2.22.0 in ./venv/lib/python3.8/site-packages (from OctoPrint==1.4.0) (2.22.0)
Collecting rsa<5,>=4.0
  Using cached rsa-4.6-py3-none-any.whl (47 kB)
Processing /home/aaron/.cache/pip/wheels/5a/9a/08/3032c8c58cadc2658cd2c7198421381216a0e44dec2bae172e/sarge-0.1.5.post0-py3-none-any.whl
Collecting semantic_version<2.9,>=2.8
  Using cached semantic_version-2.8.5-py2.py3-none-any.whl (15 kB)
Collecting sentry-sdk==0.13.2
  Using cached sentry_sdk-0.13.2-py2.py3-none-any.whl (91 kB)
Processing /home/aaron/.cache/pip/wheels/20/fe/26/0c03adccd0cec2744261ec6b8380fbe5e726d1ea4cf3a9370e/tornado-4.5.3-cp38-cp38-linux_x86_64.whl
Processing /home/aaron/.cache/pip/wheels/88/53/5f/7fcb55d6c6500fa974c3228b5deb75c7522c192522b3ec4ff3/watchdog-0.9.0-py3-none-any.whl
Collecting websocket-client<0.57,>=0.56
  Using cached websocket_client-0.56.0-py2.py3-none-any.whl (200 kB)
Collecting werkzeug<0.17,>=0.16
  Using cached Werkzeug-0.16.1-py2.py3-none-any.whl (327 kB)
Processing /home/aaron/.cache/pip/wheels/52/25/16/7e228f52ee876e9c9c66dfd6eaf6fb2f73f18629a74dcf7045/wrapt-1.11.2-py3-none-any.whl
Collecting webassets>=0.11.1
  Using cached webassets-2.0-py3-none-any.whl (142 kB)
Collecting Babel>=2.3
  Using cached Babel-2.8.0-py2.py3-none-any.whl (8.6 MB)
Collecting MarkupSafe
  Using cached MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl (32 kB)
Collecting Unidecode<0.05,>=0.04.14
  Using cached Unidecode-0.04.21-py2.py3-none-any.whl (228 kB)
Collecting itsdangerous>=0.21
  Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Requirement already satisfied: setuptools>=36 in ./venv/lib/python3.8/site-packages (from markdown<3.2,>=3.1->OctoPrint==1.4.0) (44.0.0)
Collecting pyasn1>=0.1.3
  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Requirement already satisfied: certifi in ./venv/lib/python3.8/site-packages (from sentry-sdk==0.13.2->OctoPrint==1.4.0) (2019.11.28)
Requirement already satisfied: urllib3>=1.10.0 in ./venv/lib/python3.8/site-packages (from sentry-sdk==0.13.2->OctoPrint==1.4.0) (1.25.8)
Processing /home/aaron/.cache/pip/wheels/4c/8e/7e/72fbc243e1aeecae64a96875432e70d4e92f3d2d18123be004/pathtools-0.1.2-py3-none-any.whl
Collecting argh>=0.24.1
  Using cached argh-0.26.2-py2.py3-none-any.whl (30 kB)
Requirement already satisfied: six in ./venv/lib/python3.8/site-packages (from websocket-client<0.57,>=0.56->OctoPrint==1.4.0) (1.14.0)
Collecting pytz>=2015.7
  Using cached pytz-2020.1-py2.py3-none-any.whl (510 kB)
Building wheels for collected packages: OctoPrint, netifaces, psutil
  Building wheel for OctoPrint (setup.py) ... done
  Created wheel for OctoPrint: filename=OctoPrint-1.4.0-py2.py3-none-any.whl size=3114120 sha256=958be62b48bf8cdcdbf40a7ce6e3cdba7589461e60608fe1780dc37bfeceac22
  Stored in directory: /tmp/pip-ephem-wheel-cache-scw4edf9/wheels/79/34/00/a993e0e048972ce0a5c0f92cd9f5174f096359cd0c6366952f
  Building wheel for netifaces (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-29ogvf6i/netifaces/setup.py'"'"'; __file__='"'"'/tmp/pip-install-29ogvf6i/netifaces/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-a9v5n090
       cwd: /tmp/pip-install-29ogvf6i/netifaces/
  Complete output (20 lines):
  running bdist_wheel
  running build
  running build_ext
  checking for getifaddrs...found.
  checking for getnameinfo...found.
  checking for IPv6 socket IOCTLs...not found.
  checking for optional header files...netash/ash.h netatalk/at.h netax25/ax25.h neteconet/ec.h netipx/ipx.h netpacket/packet.h netrose/rose.h linux/atm.h linux/llc.h linux/tipc.h linux/dn.h.
  checking whether struct sockaddr has a length field...no.
  checking which sockaddr_xxx structs are defined...at ax25 in in6 ipx un rose ash ec ll atmpvc atmsvc dn llc.
  checking for routing socket support...no.
  checking for sysctl(CTL_NET...) support...no.
  checking for netlink support...yes.
  will use netlink to read routing table
  building 'netifaces' extension
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DNETIFACES_VERSION=0.10.9 -DHAVE_GETIFADDRS=1 -DHAVE_GETNAMEINFO=1 -DHAVE_NETASH_ASH_H=1 -DHAVE_NETATALK_AT_H=1 -DHAVE_NETAX25_AX25_H=1 -DHAVE_NETECONET_EC_H=1 -DHAVE_NETIPX_IPX_H=1 -DHAVE_NETPACKET_PACKET_H=1 -DHAVE_NETROSE_ROSE_H=1 -DHAVE_LINUX_ATM_H=1 -DHAVE_LINUX_LLC_H=1 -DHAVE_LINUX_TIPC_H=1 -DHAVE_LINUX_DN_H=1 -DHAVE_SOCKADDR_AT=1 -DHAVE_SOCKADDR_AX25=1 -DHAVE_SOCKADDR_IN=1 -DHAVE_SOCKADDR_IN6=1 -DHAVE_SOCKADDR_IPX=1 -DHAVE_SOCKADDR_UN=1 -DHAVE_SOCKADDR_ROSE=1 -DHAVE_SOCKADDR_ASH=1 -DHAVE_SOCKADDR_EC=1 -DHAVE_SOCKADDR_LL=1 -DHAVE_SOCKADDR_ATMPVC=1 -DHAVE_SOCKADDR_ATMSVC=1 -DHAVE_SOCKADDR_DN=1 -DHAVE_SOCKADDR_LLC=1 -DHAVE_PF_NETLINK=1 -I/home/aaron/OctoPrint/venv/include -I/usr/include/python3.8 -c netifaces.c -o build/temp.linux-x86_64-3.8/netifaces.o
  netifaces.c:1:10: fatal error: Python.h: No such file or directory
      1 | #include <Python.h>
        |          ^~~~~~~~~~
  compilation terminated.
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for netifaces
  Running setup.py clean for netifaces
  Building wheel for psutil (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-29ogvf6i/psutil/setup.py'"'"'; __file__='"'"'/tmp/pip-install-29ogvf6i/psutil/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-ak60kgcs
       cwd: /tmp/pip-install-29ogvf6i/psutil/
  Complete output (44 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.8
  creating build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pslinux.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_common.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pssunos.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psposix.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_pswindows.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psbsd.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/__init__.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psaix.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_compat.py -> build/lib.linux-x86_64-3.8/psutil
  copying psutil/_psosx.py -> build/lib.linux-x86_64-3.8/psutil
  creating build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_windows.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_linux.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_memory_leaks.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/runner.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_contracts.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_bsd.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_system.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_unicode.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_process.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_posix.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_connections.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_osx.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/__init__.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_misc.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/__main__.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_sunos.py -> build/lib.linux-x86_64-3.8/psutil/tests
  copying psutil/tests/test_aix.py -> build/lib.linux-x86_64-3.8/psutil/tests
  running build_ext
  building 'psutil._psutil_linux' extension
  creating build/temp.linux-x86_64-3.8
  creating build/temp.linux-x86_64-3.8/psutil
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=567 -DPSUTIL_LINUX=1 -I/home/aaron/OctoPrint/venv/include -I/usr/include/python3.8 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-3.8/psutil/_psutil_common.o
  psutil/_psutil_common.c:9:10: fatal error: Python.h: No such file or directory
      9 | #include <Python.h>
        |          ^~~~~~~~~~
  compilation terminated.
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for psutil
  Running setup.py clean for psutil
Successfully built OctoPrint
Failed to build netifaces psutil
Installing collected packages: Click, werkzeug, itsdangerous, MarkupSafe, Jinja2, flask, webassets, Flask-Assets, pytz, Babel, Flask-Babel, Flask-Login, PyYAML, regex, Unidecode, awesome-slugify, blinker, cachelib, emoji, feedparser, filetype, frozendict, future, markdown, netaddr, netifaces, pkginfo, psutil, pylru, pyserial, pyasn1, rsa, sarge, semantic-version, sentry-sdk, tornado, pathtools, argh, watchdog, websocket-client, wrapt, OctoPrint
    Running setup.py install for netifaces ... error
    ERROR: Command errored out with exit status 1:
     command: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-29ogvf6i/netifaces/setup.py'"'"'; __file__='"'"'/tmp/pip-install-29ogvf6i/netifaces/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-record-nsnqira_/install-record.txt --single-version-externally-managed --compile --install-headers /home/aaron/OctoPrint/venv/include/site/python3.8/netifaces
         cwd: /tmp/pip-install-29ogvf6i/netifaces/
    Complete output (20 lines):
    running install
    running build
    running build_ext
    checking for getifaddrs...found.
    checking for getnameinfo...found.
    checking for IPv6 socket IOCTLs...not found.
    checking for optional header files...netash/ash.h netatalk/at.h netax25/ax25.h neteconet/ec.h netipx/ipx.h netpacket/packet.h netrose/rose.h linux/atm.h linux/llc.h linux/tipc.h linux/dn.h.
    checking whether struct sockaddr has a length field...no.
    checking which sockaddr_xxx structs are defined...at ax25 in in6 ipx un rose ash ec ll atmpvc atmsvc dn llc.
    checking for routing socket support...no.
    checking for sysctl(CTL_NET...) support...no.
    checking for netlink support...yes.
    will use netlink to read routing table
    building 'netifaces' extension
    x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DNETIFACES_VERSION=0.10.9 -DHAVE_GETIFADDRS=1 -DHAVE_GETNAMEINFO=1 -DHAVE_NETASH_ASH_H=1 -DHAVE_NETATALK_AT_H=1 -DHAVE_NETAX25_AX25_H=1 -DHAVE_NETECONET_EC_H=1 -DHAVE_NETIPX_IPX_H=1 -DHAVE_NETPACKET_PACKET_H=1 -DHAVE_NETROSE_ROSE_H=1 -DHAVE_LINUX_ATM_H=1 -DHAVE_LINUX_LLC_H=1 -DHAVE_LINUX_TIPC_H=1 -DHAVE_LINUX_DN_H=1 -DHAVE_SOCKADDR_AT=1 -DHAVE_SOCKADDR_AX25=1 -DHAVE_SOCKADDR_IN=1 -DHAVE_SOCKADDR_IN6=1 -DHAVE_SOCKADDR_IPX=1 -DHAVE_SOCKADDR_UN=1 -DHAVE_SOCKADDR_ROSE=1 -DHAVE_SOCKADDR_ASH=1 -DHAVE_SOCKADDR_EC=1 -DHAVE_SOCKADDR_LL=1 -DHAVE_SOCKADDR_ATMPVC=1 -DHAVE_SOCKADDR_ATMSVC=1 -DHAVE_SOCKADDR_DN=1 -DHAVE_SOCKADDR_LLC=1 -DHAVE_PF_NETLINK=1 -I/home/aaron/OctoPrint/venv/include -I/usr/include/python3.8 -c netifaces.c -o build/temp.linux-x86_64-3.8/netifaces.o
    netifaces.c:1:10: fatal error: Python.h: No such file or directory
        1 | #include <Python.h>
          |          ^~~~~~~~~~
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/aaron/OctoPrint/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-29ogvf6i/netifaces/setup.py'"'"'; __file__='"'"'/tmp/pip-install-29ogvf6i/netifaces/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-record-nsnqira_/install-record.txt --single-version-externally-managed --compile --install-headers /home/aaron/OctoPrint/venv/include/site/python3.8/netifaces Check the logs for full command output.
aaron@octonuc:~/OctoPrint$

Not sure what is going wrong but starting to get frustrated.

The guide that @PrintedWeezl linked above says to do this as one of the very first steps:

sudo apt install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential

Without python-dev there won't be a Python.h and you'll run into an error during installation as observed.

As it says there, those are generic steps that assume you have everything already set up fully at the operating system level. That includes being able to compile binary extensions for Python modules.

1 Like